首页 > 解决方案 > 尝试在两个 Keycloak 之间联合用户时出现意外错误(来自令牌的错误受众)

问题描述

我有两个 keycloaks,一个是 6.x(父 IDP),另一个是 3.x(子 IDP),当尝试将用户从父到子联合时遇到意外错误。子 IDP 的堆栈跟踪,

Failed to make identity provider oauth callback: org.keycloak.broker.provider.IdentityBrokerException: Could not fetch attributes from userinfo endpoint.
    at org.keycloak.broker.oidc.OIDCIdentityProvider.getFederatedIdentity(OIDCIdentityProvider.java:366)
Caused by: org.keycloak.broker.provider.IdentityBrokerException: Wrong audience from token.

但是根据我已经配置了两个 IDP 的文档,如果我尝试从父母到孩子的联合,它可以无缝地工作,有人知道这个问题的根本原因吗?

标签: keycloak

解决方案


发生这种情况是因为从 4.6.0 版本开始决定不向令牌添加受众属性。这就是为什么旧的 keycloak 抱怨令牌中的错误受众的原因。

为了解决这个问题,请转到父 IDP 的客户端范围第 1 步创建客户端范围“aud_scope”第 2 步在此范围的设置中创建协议映射器

  • 名称:观众映射器
  • 选择映射器类型:受众
  • 包含的客户受众:联合客户的名称
  • 添加到访问令牌:打开

然后转到联合客户端并在客户端范围设置选项卡中,

将可用的客户端范围“aud_scope”添加到分配的默认客户端范围


推荐阅读