keycloak 客户端协议映射器(脚本映射器)将请求标头添加到令牌中

Posted

技术标签:

【中文标题】keycloak 客户端协议映射器(脚本映射器)将请求标头添加到令牌中【英文标题】:keycloak client protocol mapper (script mapper) to add request header into token 【发布时间】:2018-04-24 07:53:00 【问题描述】:

当我从 keycloak 请求令牌时,我希望将请求中提供的特定标头值(或额外的表单数据)放入生成的令牌的 JWT 有效负载中。我尝试使用脚本映射器来访问标题值,但我看不到如何访问标题值或任何可用脚本变量中发送的表单数据中的数据:userrealmuserSessionkeyclockSession

【问题讨论】:

【参考方案1】:

您可以使用 keycloakSession 对象访问请求标头,例如

keycloakSession.getContext().getRequestHeaders().getRequestHeader("User-Agent")

如果您检查 DefaultEvaluationContext 类的代码,这就是他们添加 User-Agent 标头的方式。

【讨论】:

对于移动应用程序,我们可以使用它来检索 device_id 、 device_model 等作为声明插入吗? 这适用于基本身份验证,适用于 Oauth2,当我设置 clientId 密码时,我得到 getRequestHeader 的空数组。不确定是否有任何其他方式来获取请求标头。

以上是关于keycloak 客户端协议映射器(脚本映射器)将请求标头添加到令牌中的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak 中的协议映射器如何工作?

keycloak - 使用 kcadm.sh 将协议映射器添加到 keycloak

keycloak 从自定义协议映射器抛出身份验证错误

使用 kcadm.sh 在 Keycloak 中创建协议映射器

Keycloak 使用自定义协议映射器从数据库/外部源添加额外声明

Keycloak 客户端映射器将领域名称显示为 JWT 令牌中的单个属性