Keycloak 与 AzureAD 如何更改 IDP 用户 ID / IDP 链接

问题描述 投票:0回答:1

我通过 OIDC 将 Keycloak 与 AzureAD 作为 IdP 集成。当我通过 AzureAD 登录时,Keycloak 使用的 ID 作为 Azure 的唯一 ID(用于唯一标识 ua AzureAD 帐户)是 AzureAD 的声明 sub

which seems to be the standard
。 声明 sub 的问题在于它是“动态生成的”,并且它会在 Azure 中的不同应用程序中发生变化,并且在 AzureAD 中的任何位置都不可用。我无法提前知道每个用户的唯一 ID 是什么。

首次登录时,会自动创建他们的帐户,并且身份提供商链接是这个**子**值

This is not the value I want to use 这不是我想要使用的值

我需要做什么才能强制 Keycloak 使用字段 oid 的值。 oid 是 AzureAD 中的唯一用户 ID。 这对我来说是一个更可靠的 ID - 更重要的是我可以自动配置帐户,而无需他们登录一次。

我创建了映射以将 oid 的值强制写入 sub 属性。 This is the value I want to use 这不是我想要使用的值

它似乎在 Keycloak 中工作,因为我可以参数 sub 现在具有他 oid 的值,但为时已晚,该帐户已经使用 sub 值作为 IDP 的唯一标识符创建了

我尝试使用映射器将 oid 的值强制放入子进程中,但在工作流程中似乎为时已晚。 我已在范围中添加“openid 配置文件”,以确保收到 oid 声明。 我知道它可用,因为我可以在我映射的属性中看到它。

所以我的问题是:keycloak 有没有办法更改它从 JWT 中使用的值作为Provider User ID

azure-active-directory keycloak openid-connect
1个回答
0
投票

确实有一种方法可以强制Keycloak使用另一个字段作为Provider User ID。

警告语您要确保您使用的值确实是唯一的,否则您将面临混合账户的风险

转到 身份提供商,选择您的 IdP,然后选择 映射器

您需要创建一个新的映射:

Name:您想要为映射添加的任何名称 同步模式覆盖:继承或强制应该起作用 映射器类型:用户名模板导入器 Template : ${CLAIM.oid} --> 这是专门针对我的案例使用 OID,但可以替换为任何唯一的声明 目标:BROKER_ID

see image: The configuration of the mapper

此映射器可用于强制使用 BROKER_NAME,或 Keycloak 中的本地用户名。

我的帐户是直接使用 OID 作为提供商用户 ID 创建的 OID used as Broker ID

© www.soinside.com 2019 - 2024. All rights reserved.