Keycloak 是否可以在KeyClope中为每个用户添加多封电子邮件?

Keycloak 是否可以在KeyClope中为每个用户添加多封电子邮件?,keycloak,Keycloak,我通过谷歌、微软等公司使用Key斗篷进行身份代理,但Key斗篷只允许每个用户发送一封电子邮件。因此,用户只能通过其中一个社交登录选项进行身份验证(如果将gmail添加为用户的电子邮件地址,则使用Google等)。是否有任何方法可以为每个用户包含一封以上的电子邮件,或任何其他解决方法 编辑:(根据评论进行编辑,使场景更加清晰) 在我的场景中,我使用的是一个包含大量用户的联邦用户存储,当用户使用Google、Azure等登录时,我需要Key斗篷来访问链接到该用户的所有电子邮件。因为Key斗篷使用电子

我通过谷歌、微软等公司使用Key斗篷进行身份代理,但Key斗篷只允许每个用户发送一封电子邮件。因此,用户只能通过其中一个社交登录选项进行身份验证(如果将gmail添加为用户的电子邮件地址,则使用Google等)。是否有任何方法可以为每个用户包含一封以上的电子邮件,或任何其他解决方法

编辑:(根据评论进行编辑,使场景更加清晰)


在我的场景中,我使用的是一个包含大量用户的联邦用户存储,当用户使用Google、Azure等登录时,我需要Key斗篷来访问链接到该用户的所有电子邮件。因为Key斗篷使用电子邮件作为来自社交登录提供商的身份验证响应的唯一标识符。如果不将所需的电子邮件作为主电子邮件,Key斗篷将不允许该用户通过社交IdP登录。尽管Key斗篷强调保留唯一的电子邮件,但在某些情况下,您可能希望保留,例如,次要电子邮件

这可以通过几个步骤实现:

1。为用户中的辅助电子邮件添加自定义属性,如下所示:

2。接下来,在客户机中创建如下属性映射器:

当我在上述配置之后生成令牌时,新属性在令牌中是可用的。您可以根据需要在应用程序中使用此属性

解析JWT:


我发现解决这个问题的最佳方法是通过自定义用户提供程序(联邦用户存储)。尽管我们无法通过KeyClope管理控制台为每个用户添加多封电子邮件,但我们可以编写用户提供程序,使其能够从我们的数据库中获取链接到用户的所有电子邮件,并将其分配给每个用户的电子邮件属性。完成后,所有电子邮件也将显示在管理控制台上

为了让社交登录能够识别这些电子邮件,我们必须将与提供商中的用户链接的所有电子邮件放到一个数组中,并对其进行迭代,直到身份验证完成。这将有助于通过第一个登录代理身份验证流创建到用户的社交登录链接


这是一种粗糙的方法,但它仍然有效

谢谢。但在我的场景中,我使用的是一个联邦用户存储,其中包含大量用户,并且当用户使用Google、Azure等登录时,我需要Key斗篷来访问链接到该用户的所有电子邮件。因为Key斗篷使用电子邮件作为来自社交登录提供商的身份验证响应的唯一标识符。如果没有所需的电子邮件作为主电子邮件,Key斗篷将不允许该用户通过社交IdP登录。