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

Unexpected error while trying to federate users between two Keycloaks (Wrong audience from token)

我有两个 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,如果我尝试从父级到子级进行联合,它会无缝工作,有人知道这个问题的根本原因吗?

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

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

  • 姓名:audience-mapper
  • 选择映射器类型:受众
  • 包括的客户端受众:联合客户端的名称
  • 添加到访问令牌:on

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

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