扩展 Keycloak 的正确方法是什么——例如通过服务提供者接口 (SPI)——用从另一个服务获取的信息来丰富发布的 JWT 令牌,但不将用户凭据检查委托给另一个服务?
我在 Keycloak 中创建了一个角色和一个用户,并在其中添加了一个属性;例如:
my_role_attr = 'x'
my_user_attr = 'y'
Run Code Online (Sandbox Code Playgroud)
然后我尝试访问该信息。通过 JAVA KeycloakSecurityContext(以及关联的 AccessToken / IDToken)。我可以看到角色的名称和用户信息,但找不到这些属性。
我知道我必须创建一个协议映射器“用户属性”以将“my_user_attr”映射到令牌声明中。然后就可以获取AccessToken / IDToken中的值了。
但我找不到获取角色属性的方法。我没有看到任何角色属性的“协议映射器”。我是不是错过了什么。
当我从 keycloak 请求令牌时,我希望将请求中提供的特定标头值(或额外的表单数据)放入生成的令牌的 JWT 负载中。我尝试使用脚本映射器来访问标头值,但我看不到如何访问以任何可用脚本变量发送的表单数据中的标头值或数据:user
, realm
, userSession
, keyclockSession
。