如何将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

相关推荐
唐青枫2 分钟前
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
java
ShiXZ2131 小时前
Java 8 Stream API 实用技巧详解:从入门到精通
java·开发语言
C++、Java和Python的菜鸟2 小时前
第9章 后端Web进阶(AOP)
java·开发语言·前端
东北赵四2 小时前
关于Java泛型的知识点及其相关面试题
java·windows·python
姓蔡小朋友2 小时前
Java线程并发
java·开发语言·python
执笔画流年呀2 小时前
⾃动化测试常⽤函数
java·dubbo
疯狂打码的少年2 小时前
【面向对象】UML概述(基本构造块:事物/关系/图)
java
一水3 小时前
TTFT优化:一个方案的5次推倒重来
java·ai·状态模式
AC赳赳老秦3 小时前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw
磁爆步兵3 小时前
内存分区:程序运行的核心秘密
java·开发语言·jvm