keycloak - 尝试在两个 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 的文档,如果我尝试从父母到孩子的联合,它可以无缝地工作,有人知道这个问题的根本原因吗?
解决方案
发生这种情况是因为从 4.6.0 版本开始决定不向令牌添加受众属性。这就是为什么旧的 keycloak 抱怨令牌中的错误受众的原因。
为了解决这个问题,请转到父 IDP 的客户端范围第 1 步创建客户端范围“aud_scope”第 2 步在此范围的设置中创建协议映射器
- 名称:观众映射器
- 选择映射器类型:受众
- 包含的客户受众:联合客户的名称
- 添加到访问令牌:打开
然后转到联合客户端并在客户端范围设置选项卡中,
将可用的客户端范围“aud_scope”添加到分配的默认客户端范围
推荐阅读
- c# - 从datagrid winforms c#获取文本框单元格值
- python - 真正令人沮丧的 Python/Numpy 错误。“无法将输入数组从形状 (6) 广播到形状 (1)”
- mysql - 如何在 MySQL 中增加一个值?我想找到 max tot 必须为 1 的学生成绩,依此类推
- websocket - 即使服务器正在发送数据,也不会调用 ws.onmessage
- php - 指向 PHP 文件或包含 PHP 文件的 HTML 表单
- wso2 - 限制 WSO2 商店注册以创建默认应用程序
- c# - 如何在不使用 Visual Studio 的情况下编辑 rdlc 报告
- c# - 使用差异补丁匹配读取文本格式
- python - 使用 Django 泛型关系时如何进行正确的反向查询?
- java - 以非常规方式创建的抽象类