身份验证

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

GraphQL 库提供了 @authentication 指令,用于配置某些操作和 Schema 不同部分的身份验证。

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

操作

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

  • 创建

  • 读取

  • 聚合

  • 更新

  • 删除

  • 创建关系

  • 删除关系

  • 订阅

例如,仅在更新或删除用户时需要身份验证

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

如果 operations 参数未提供操作列表,GraphQL 库会将此身份验证配置视为已提供了完整的操作列表。

范围

全局身份验证

身份验证可以应用于整个 Schema。这确保了每个匹配请求都会进行身份验证检查。

扩展 Schema

extend schema @authentication

当指令应用于 Schema 扩展时,也可以使用 operationsjwt 参数,例如

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

类型的身份验证

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

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

通过此配置,当尝试执行以下任何操作时,都会验证身份验证:

  • 创建createUsers 变更操作,通过相关类型执行的 create 嵌套操作。

  • 读取usersusersConnectionaggregate 查询,或通过相关类型进行访问。

  • 更新updateUsers 变更操作,或通过相关类型执行的 update 嵌套操作。

  • 删除deleteUsers 变更操作,或通过相关类型执行的 delete 嵌套操作。

  • 创建关系:通过相关类型执行的 connect 嵌套操作。

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

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

字段的身份验证

可以按字段配置身份验证,例如

type User @node {
    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!
}
© . All rights reserved.