我通过 OIDC 将 Keycloak 与 AzureAD 作为 IdP 集成。当我通过 AzureAD 登录时,Keycloak 使用的 ID 作为 Azure 的唯一 ID(用于唯一标识 ua AzureAD 帐户)是 AzureAD 的声明 sub、
which seems to be the standard
。
声明 sub 的问题在于它是“动态生成的”,并且它会在 Azure 中的不同应用程序中发生变化,并且在 AzureAD 中的任何位置都不可用。我无法提前知道每个用户的唯一 ID 是什么。
首次登录时,会自动创建他们的帐户,并且身份提供商链接是这个**子**值
我需要做什么才能强制 Keycloak 使用字段 oid 的值。 oid 是 AzureAD 中的唯一用户 ID。 这对我来说是一个更可靠的 ID - 更重要的是我可以自动配置帐户,而无需他们登录一次。
我创建了映射以将 oid 的值强制写入 sub 属性。 这不是我想要使用的值
它似乎在 Keycloak 中工作,因为我可以参数 sub 现在具有他 oid 的值,但为时已晚,该帐户已经使用 sub 值作为 IDP 的唯一标识符创建了
我尝试使用映射器将 oid 的值强制放入子进程中,但在工作流程中似乎为时已晚。 我已在范围中添加“openid 配置文件”,以确保收到 oid 声明。 我知道它可用,因为我可以在我映射的属性中看到它。
所以我的问题是:keycloak 有没有办法更改它从 JWT 中使用的值作为Provider User ID
确实有一种方法可以强制Keycloak使用另一个字段作为Provider User ID。
警告语您要确保您使用的值确实是唯一的,否则您将面临混合账户的风险
转到 身份提供商,选择您的 IdP,然后选择 映射器
您需要创建一个新的映射:
Name:您想要为映射添加的任何名称 同步模式覆盖:继承或强制应该起作用 映射器类型:用户名模板导入器 Template : ${CLAIM.oid} --> 这是专门针对我的案例使用 OID,但可以替换为任何唯一的声明 目标:BROKER_ID
此映射器可用于强制使用 BROKER_NAME,或 Keycloak 中的本地用户名。