如何从 Keycloak JWT 访问令牌中删除属性?

Posted

技术标签:

【中文标题】如何从 Keycloak JWT 访问令牌中删除属性?【英文标题】:How to remove attributes from the Keycloak JWT access token? 【发布时间】:2021-11-23 15:55:02 【问题描述】:

默认情况下,Keycloak 生成带有以下负载的令牌:


  "jti": "71ac4939-03cb-4ce2-b072-08fa7e1b7f37",
  "exp": 1560239903,
  "nbf": 0,
  "iat": 1560239843,
  "iss": "http://localhost:8080/auth/realms/master",
  "sub": "d3ea1306-f0f9-4b25-b7c5-e64dfbdf949e",
  "typ": "Bearer",
  "azp": "admin-cli",
  "auth_time": 0,
  "session_state": "0162e8c3-25b3-4fd9-8416-e28bd27b61bd",
  "acr": "1",
  "scope": "email profile",
  "email_verified": false,
  "preferred_username": "admin"

我们可以使用protocol mapper来添加自定义字段,但是是否可以删除不必要的字段?例如我不想要 acremail_verifiedazp 等等……

【问题讨论】:

【参考方案1】:

正确配置映射器和客户端范围。每个范围都有自己的一组已配置协议映射器,这可能会添加额外的声明。例如。 email 默认作用域:

请记住:范围也可以是默认值,因此它们将被隐式执行,而无需在身份验证请求中明确定义:

【讨论】:

谢谢@Jan Garaj。我可以使用您提到的方法消除 email_verified 和其他一些字段。但是acr和azp仍然是象征性的。是否也可以删除它们? @sinaaskarnejad acr/azp 对您来说可能是不必要的声明,但它们对于使用的 OIDC 协议具有技术意义。我猜你不能禁用它们。

以上是关于如何从 Keycloak JWT 访问令牌中删除属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Java/Kotlin API 从 KeyCloak 请求 JWT 令牌

使用带有spring security的keycloak JWT令牌时如何修复403

Keycloak 访问令牌与 UserInfo 令牌?

Keycloak:访问令牌验证端点

Keycloak - 通过OIDC端点检索JWT令牌

从 keycloak jwt 令牌获取 ID(不是 clientId)