是否存在向身份提供商写入用户属性的开放标准API?
基于开放标准实现客户端向身份提供商写入用户属性的方案
1. OpenID Connect (OIDC) UserInfo 端点扩展(PATCH 方法)
OIDC 原生规范以用户属性读取为主,但多数主流身份提供商(IDP)都支持通过PATCH 请求扩展/userinfo端点,实现用户属性的更新:
- 权限要求:客户端需申请专属更新权限的 scope(如
profile:write或自定义的user_attributes:edit),认证时通过 Access Token 携带该权限 - 请求示例:
PATCH /userinfo Authorization: Bearer {valid_access_token} Content-Type: application/json { "nickname": "dev_john", "myapp_notification_setting": "daily" }
- 适配场景:既支持修改 OIDC 标准 Claims(如姓名、昵称),也可写入自定义属性,能满足跨客户端共享属性的需求
2. SCIM 2.0(跨域身份管理系统)
SCIM 是专门针对身份数据 CRUD 设计的开放标准,完全覆盖用户属性读写需求:
- 核心操作:通过
PUT或PATCH请求/Users/{user_id}端点更新用户属性,客户端需通过 OAuth 2.0 Access Token 完成认证 - 请求示例(PATCH 更新自定义应用偏好):
PATCH /Users/{user_uuid} Authorization: Bearer {valid_access_token} Content-Type: application/json-patch+json [ { "op": "replace", "path": "/urn:ietf:params:scim:schemas:extension:myapp:2.0:User/preferences", "value": {"theme": "dark", "auto_save": true} } ]
- 适配场景:适合需要复杂属性结构、跨系统同步用户数据的场景——应用专属偏好可放在自定义扩展 Schema 下,共享属性使用 SCIM 标准字段
3. OAuth 2.0 Claims 管理扩展
部分 IDP 遵循 RFC 7519(JWT)扩展规则,提供专门的 Claims 管理端点,结合 OAuth 2.0 权限体系实现属性写入:
- 权限要求:客户端需获取
update_user_claims类的 scope,请求时携带用户标识与待更新的 Claims 集合 - 优势:完全兼容 OIDC 生态,无需引入额外协议,适合轻量属性更新场景
场景匹配建议
- 场景1(应用专属偏好):优先使用 SCIM 自定义扩展 Schema,或在 OIDC UserInfo 中使用带应用前缀的自定义字段(如
myapp_theme),避免与其他客户端属性冲突 - 场景2(跨客户端共享属性):使用 OIDC 标准 Claims 的更新(通过 UserInfo PATCH)或 SCIM 标准用户字段,确保属性在所有授权客户端间同步
内容的提问来源于stack exchange,提问作者pixelistik
相关产品推荐
相关产品推荐

