身份验证

GraphQL 库提供 @authentication 指令来配置某些操作和模式不同部分的身份验证。

使用 @authentication 指令配置的显式身份验证仅在 Cypher 翻译时进行评估。未经身份验证的请求,其查询需要身份验证,永远不会到达数据库。

操作

可以配置身份验证,使其仅在某些操作上进行验证

  • 创建

  • 读取

  • 聚合

  • 更新

  • 删除

  • 创建关系

  • 删除关系

  • 订阅

例如,要仅要求对用户进行更新或删除身份验证

type User @authentication(operations: [UPDATE, DELETE]) {
    id: ID!
    name: String!
    password: String!
}

如果没有包含操作列表的 operations 参数,GraphQL 库将把身份验证配置视为提供了所有操作的完整列表。

范围

全局身份验证

身份验证可以应用于整个模式。这确保对每个匹配的请求都检查身份验证。

扩展模式

extend schema @authentication

operationsjwt 参数也可以在指令应用于模式扩展时使用,例如

extend schema @authentication(operations: [UPDATE, DELETE], jwt: { roles_INCLUDES: "admin" })

类型身份验证

可以为整个类型配置身份验证

type User @authentication {
    id: ID!
    name: String!
    password: String!
}

使用此配置,当尝试执行以下任何操作时,将验证身份验证

  • 创建: createUsers 变异、createconnectOrCreate 嵌套操作,通过相关类型。

  • 读取: usersusersConnectionusersAggregate 查询,或通过相关类型访问。

  • 更新: updateUsers 变异或 update 嵌套操作,通过相关类型。

  • 删除: deleteUsers 变异或 delete 嵌套操作,通过相关类型。

  • 创建关系: connectconnectOrCreate 嵌套操作,通过相关类型。

  • 删除关系: disconnect 嵌套操作,通过相关类型。

  • 订阅: 与 User 类型相关的所有订阅操作。

字段身份验证

可以为每个字段配置身份验证,例如

type User {
    id: ID!
    name: String!
    password: String! @authentication
}

这仅在以下情况下进行评估

  • password 字段在 createupdate 上设置。

  • password 字段出现在选择集中。

其他验证

可以与身份验证一起执行对 JWT 声明的其他检查。例如,如果要求只有具有 admin 角色的用户才能删除用户

type User @authentication(operations: [DELETE], jwt: { roles_INCLUDES: "admin" }) {
    id: ID!
    name: String!
    password: String!
}