如何将IDP映射属性添加,到accountToken中 方便项目获取登录人信息

✅ 目标

你想要:

  • 用户通过 IdP 登录(SAML 或 OAuth2)
  • Keycloak 自动将 IdP 返回的属性(如:email、name、role 等)映射到用户账户中
  • 并把这些属性加入到用户登录返回的 Access Token 中,供业务系统解析使用

✅ 实现步骤


🎯 一、确保 Identity Provider 映射到用户属性

  1. 登录 Keycloak 管理后台
  2. 进入 Realm → Identity Providers → 点击你配置的 IdP(如 azure-admy-oauth-idp
  3. 切换到 Mappers 标签页
  4. 创建一组属性映射,例如:
Mapper Name Mapper Type Attribute/Claim User Attribute
email Attribute Importer(SAML) 或 Claim to User Attribute(OIDC) email 或对应 claim email
name ... name firstName
roles ... roles realmRoles 或自定义属性

✅ 这一步确保用户登录时,这些 IdP 属性会被"写入"到 Keycloak 用户模型中。


🎯 二、将用户属性添加到 Token 中(重点)

你要修改客户端(client)下的 Token Mapper:

  1. 进入你的 Realm → Clients(客户端)
  2. 找到你的业务系统的 client(比如 my-web-app
  3. 点击进入 → 切换到 Client ScopesClient Settings → 找到 MappersClient Scopes
  4. 添加或修改如下 Mapper:
✅ 示例:添加自定义属性到 Token
字段
Name email-into-token
Mapper Type User Property
Property email
Token Claim Name email
Claim JSON Type String
Add to ID token
Add to access token
Add to userinfo ✅(用于 OIDC userinfo 接口)

你可以多添加几个:

  • username
  • firstName
  • lastName
  • custom-attribute(自定义属性)

✅ 三、在项目中解析 Token

拿到用户登录的 Access Token 后,你的服务只要解析 JWT,就可以直接拿到这些字段:

json 复制代码
{
  "sub": "xxxxx",
  "email": "user@example.com",
  "name": "张三",
  "preferred_username": "zhangsan",
  ...
}

📝 注意事项

  • 对于 SAML IdP,一定要先把属性导入成 Keycloak 用户字段,才能写入 Token
  • 对于 OAuth2/OIDC IdP,可以直接从 claim 映射
  • Token 的大小有限,别加太多字段
  • 如果想加角色信息,选择 Mapper Type 为 User Realm RoleUser Client Role

🎁 Bonus:快速调试令牌内容

登录成功后,你可以访问:

复制代码
https://<keycloak-host>/realms/<realm-name>/protocol/openid-connect/token

或在开发工具中解码 JWT(推荐用 jwt.io

相关推荐
怒放吧德德6 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆8 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
心之语歌10 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊11 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang11 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang13 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解13 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
SimonKing17 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean17 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven9718 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java