我正在使用Keycloak通过Google,Microsoft等进行身份代理。但是Keycloak仅允许每个用户一封电子邮件。因此,只能通过社交登录选项之一(如果将gmail添加为用户的电子邮件地址,则为Google等)来对用户进行身份验证。是否有任何方法可以为每个用户添加一封以上的电子邮件,或者采取其他解决方法?
编辑:(基于注释进行编辑以使场景更加清晰)
在我的情况下,我正在使用包含大量用户的联合用户存储,并且当该用户使用Google,Azure等登录时,我需要Keycloak才能访问与该用户链接的所有电子邮件。因为Keycloak使用电子邮件作为社交登录提供商的身份验证响应的唯一标识符。如果没有必需的电子邮件作为主要电子邮件,Keycloak将不允许该用户通过社交IDP登录
答案 0 :(得分:1)
尽管Keycloak强调保留唯一的电子邮件,但是在某些情况下,您可能希望保留例如次要电子邮件。
这可以通过几个步骤来实现:
1。像这样在用户中为辅助电子邮件添加自定义属性:
2。接下来,在您的客户端中创建属性映射器,如下所示:
当我在上述配置之后生成令牌时,新属性在令牌中不可用。您可以根据需要在应用中使用此属性。
已解析的JWT:
答案 1 :(得分:0)
我发现解决此问题的最佳方法是通过自定义用户提供程序(联合用户存储)。即使我们不能通过Keycloak管理控制台为每个用户添加多封电子邮件,我们也可以编写用户提供程序,以便它可以从数据库中获取链接到用户的所有电子邮件,并将它们分配给每个用户的电子邮件属性用户。完成后,所有电子邮件也将出现在管理控制台上。
要使社交登录名能够识别这些电子邮件,我们必须将链接到提供程序中的用户的所有电子邮件都放置到一个数组中,并对其进行遍历,直到完成身份验证为止。这将有助于通过First Login Broker身份验证流程创建到用户的社交登录链接。
这是处理此问题的粗略方法,但仍然有效!