You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenID Connect部署中用户账户存储、OP认证及JWT组声明问询

OIDC 部署中的用户存储与认证相关问题解答

用户账户详情的存储位置(与LDAP对比)

和LDAP这种专门的目录服务不同,OIDC本身不强制规定用户数据的存储位置,这完全取决于OpenID提供商(OP)的实现:

  • OP内部存储:多数OP(比如Keycloak、Auth0默认配置)自带用户数据库,直接将用户ID、密码哈希、组信息等存在自身存储系统中,LDAP反而作为可选的外部数据源存在。
  • 对接外部用户源:OP也可以通过标准接口对接LDAP、AD、关系型数据库甚至第三方身份源(如微信、GitHub),此时OP本身不存储用户敏感凭据(如密码),仅在认证时转发凭据到外部源做校验。

OP如何完成用户认证

OP是OIDC流程中负责身份校验的核心角色,认证逻辑由OP自主实现:

  • 若用户数据存在OP内部,OP直接校验用户输入的账号密码与存储的哈希值是否匹配;
  • 若对接了LDAP/AD等外部源,OP会将用户提交的凭据转发给外部系统完成校验,拿到结果后再继续OIDC授权流程;
  • 还支持无密码认证(短信验证码、生物识别)、第三方OAuth登录等方式,只要OP能确认用户身份即可。

注意:资源服务器(RS)仅负责保护API资源,不参与用户身份认证,OP不会依赖RS来校验用户身份。

给JWT添加缺失的组信息声明

如果组信息未默认包含在JWT声明中,可通过以下方式添加:

  • 配置OP声明映射:在OP的管理控制台(比如Keycloak的「客户端范围」配置),将用户的组字段映射为标准或自定义声明(如groups),同时确保授权请求中包含对应的scope(比如自定义的groups scope)。
  • 扩展OP逻辑:若OP支持扩展(如Keycloak的SPI、Auth0的规则),可编写代码从用户存储中读取组信息,手动添加到JWT的claims集合中。
  • 授权请求指定声明:在依赖方(RP)发起授权请求时,通过claims参数明确要求返回组信息,示例:
    claims={"groups": {"essential": true}}
    
    只要OP支持该参数,就会将组信息加入JWT。

内容的提问来源于stack exchange,提问作者JBravo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:12:17