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

相关推荐
小羊没烦恼!18 分钟前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
小荷才露尖尖角,早有蜻蜓立上头1 小时前
过滤器的4种创建方式
java
大圣编蚕2 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
程序员阿明2 小时前
idea把插件啥的不默认放在C盘
java·ide·intellij-idea
linweidong2 小时前
中科闻歌Java面试题及参考答案
java·python·大模型·提示词·ai agent·mcp·rag原理
OpenAnolis小助手3 小时前
一句话看透 JVM,SysOM 诊断 Skill 新增 Java 应用诊断能力
java·开发语言·jvm·阿里云·操作系统控制台·sysom
ForteScarlet3 小时前
Kotlin 2.4.20 现已发布,新特性多不多?
android·java·开发语言·开源·kotlin·jetbrains
萧瑟余晖3 小时前
Java深入解析篇六十二之安全机制详解
java·开发语言
小刘在重生~3 小时前
Java 常用类|包装类 装箱拆箱、Integer 缓存面试题
java·python·缓存
Orange_sparkle3 小时前
Pi Agent vs LangGraph:从人机交互、企业 RAG 到持久化工作流的完整选型指南
java·网络·人机交互