如何通过 keycloak 向 github 企业中的每个用户添加主电子邮件?

Posted

技术标签:

【中文标题】如何通过 keycloak 向 github 企业中的每个用户添加主电子邮件?【英文标题】:How to add primary email to every users in github enterprise via keycloak? 【发布时间】:2021-12-15 17:54:23 【问题描述】:

我已经配置了 github 企业。我使用 keycloak 进行身份验证。

注册/登录流程是这样的,

用户从 github 企业单击使用 SAML 登录。

然后他们被重定向到keycloak登录页面。

他们可以在哪里选择 github.com 进行注册。

从 github.com 成功认证后,用户被重定向到 github 企业。

现在已在 keycloak 中创建了一个新用户,用户名为 github.com 用户名和电子邮件地址为 github.com 电子邮件。

但在 github 企业中,用户的用户名是通过解析电子邮件 id 的 @ 之前的第一部分来创建的,即使 github 企业从 keycloak 接收电子邮件 id,用户的电子邮件 id 也不会在 github 企业用户帐户中更新。

用户收到以下通知,要求他们添加一个电子邮件地址。

如果用户不添加他们的电子邮件,他们将不会收到组织邀请、密码重置等事件的电子邮件。

这不是我想要的。我也没有什么用户手动将电子邮件 ID 添加到他们的帐户。

我想让github企业用户的用户名和邮箱和keycloak的一样。

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

我们通过检查浏览器网络中的 /consume 请求,从 keycloak 中提取了 saml 响应到 ghe。当 SAML 响应被解码(使用 samltool.io)时,我们发现 keycloak 没有向 ghe 发送电子邮件属性。

Github 使用以下属性来更新个人资料信息。所以keycloak需要在这个字段指定的变量中发送属性。

我们发现客户端中有一些内置的“映射器”可用,可用于向客户端应用程序发送一些指定的预定属性。

选择您的客户端 -> 映射器 -> 添加内置。选择所需的映射器并单击添加。

打开x500 Email,将“SAML Attribute Name”设置为与github上设置的变量名相同的变量。提供一些属性和友好名称。

现在您将在用户帐户中获得电子邮件地址。

【讨论】:

以上是关于如何通过 keycloak 向 github 企业中的每个用户添加主电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Keycloak 中授予部分用户部分用户管理权限?

如何从 REST API(PUT 方法)更新 Keycloak 密码?

如何在 KeyCloak 中的签名 JWT 中获取 client_assertion

Docker/Symfony/Reactjs/Keycloak:如何使用分离的 docker-compose 文件从一个容器向另一个容器发出 HTTP 请求?

如何让 Keycloak 验证用户同意?

在使用 Keycloak 保护的 web 应用程序中获取登录用户名