身份验证

这是 GraphQL 库版本 6 的文档。对于长期支持 (LTS) 版本 5,请参阅 GraphQL 库版本 5 LTS

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

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

操作

可以将身份验证配置为仅在某些操作上进行验证

  • 创建

  • 读取

  • 聚合

  • 更新

  • 删除

  • 创建关系

  • 删除关系

  • 订阅

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

type User @authentication(operations: [UPDATE, DELETE]) @node {
    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 变异,create 或通过相关类型进行的 connectOrCreate 嵌套操作。

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

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

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

  • **创建关系**:通过相关类型进行的 connectconnectOrCreate 嵌套操作。

  • **删除关系**:通过相关类型进行的 disconnect 嵌套操作。

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

字段身份验证

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

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

仅在以下情况下进行评估

  • createupdate 上设置 password 字段。

  • password 字段存在于选择集中。

其他验证

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

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