2017 年 3 月 23 日,作者:Hynek Mlnařík
本文档指导您完成 Microsoft Active Directory 联合身份验证服务 3.0 作为 Keycloak 的代理身份提供商的初始设置。
Keycloak 服务器已配置为 SSL/TLS 传输 - 这对于 AD FS 与之通信是强制性的。这包括两个步骤
在身份提供商中,创建一个新的 SAML v2.0 身份提供商。在本篇文章中,身份提供商将以别名 adfs-idp-alias 为人所知。
现在滚动到底部,并在从 URL 导入字段中输入 AD FS 描述符 URL。对于 AD FS 3.0,此 URL 为 https://fs.domain.name/FederationMetadata/2007-06/FederationMetadata.xml。单击“导入”后,检查设置。通常,您至少应启用验证签名选项。
如果发送到 AD FS 实例的身份验证请求需要签名(通常也是这种情况),则必须启用需要身份验证请求签名选项。重要的是,然后启用需要身份验证请求签名选项后显示的SAML 签名密钥名称字段必须设置为 CERT_SUBJECT,因为 AD FS 期望签名密钥名称提示是签名证书的主题。
AD FS 将在下一步中设置为以 Windows 域限定名格式响应 NameID,因此请相应地设置NameID 策略格式字段。
在下面的 AD FS 设置步骤中,AD FS 将设置为在 SAML 断言中发送电子邮件和组信息。为了将这些详细信息从 AD FS 颁发的 SAML 文档转换为 Keycloak 用户存储,我们需要在身份提供商的“映射器”选项卡中设置两个相应的映射器
现在我们从身份提供商详细信息中的重定向 URI字段中确定将在 AD FS 设置中使用的 SAML 服务提供商描述符 URI,方法是在此字段的 URI 中添加“/descriptor”。URI 将类似于 https://kc.domain.name:8443/auth/realms/master/broker/adfs-idp-alias/endpoint/descriptor。您可以通过将 URI 输入浏览器来检查您是否获得了正确的 URI - 您应该收到一个 SAML 服务提供商 XML 描述符。
在 AD FS 管理控制台中,右键单击信任关系 → 信赖方信任,然后从菜单中选择添加信赖方信任:
在向导的开始,在联合元数据地址字段中输入上一步中获得的 SAML 描述符 URL,并让 AD FS 导入设置。继续向导,并在适当的地方调整设置。在这里我们仅使用默认设置。请注意,您需要编辑声明规则,因此当在向导的最后一页要求您这样做时,您可以保持选中复选框。
现在 SAML 协议将正确进行,AD FS 将能够根据来自 Keycloak 的请求正确验证用户身份,但请求的 NameID 格式尚未被识别,并且 SAML 响应将不包含任何其他信息,例如电子邮件。因此,有必要将声明从 AD 用户详细信息映射到 SAML 文档中。
我们将设置三个规则:一个用于映射用户 ID,第二个用于映射标准用户属性,第三个用于用户组。所有规则都从单击kc.domain.name 的编辑声明规则窗口中的添加规则按钮开始:
第一个规则将 Windows 限定域名中的用户 ID 映射到 SAML 响应。在添加转换声明规则窗口中,选择转换传入声明规则类型:
上面的示例针对 Windows 帐户名称 ID 格式。支持其他名称 ID 格式,但不在本文档的范围之内。例如,请参阅 此博客,了解如何为持久性和瞬态格式设置名称 ID。
第二个规则将用户电子邮件映射到 SAML 响应。在添加转换声明规则窗口中,选择发送 LDAP 属性作为声明规则类型。您可以根据需要添加其他属性:
第三个规则将在用户是指定组的成员时发送组名。再次在添加转换声明规则窗口中启动,然后选择发送组成员身份作为声明规则类型。然后在字段中输入请求的值:
如果经过身份验证的用户是DOMAIN\Managers组的成员,则此设置将在 SAML 断言中发送一个名为Group的属性,其值为managers。
作为第一手工具,您应该在浏览器中检查 Keycloak 和 AD FS 之间来回发送的 SAML 消息。SAML 解码器可以作为浏览器扩展程序使用(例如,Firefox 的 SAML Tracer,Chrome 的 SAML Chrome Panel)。从捕获的通信中,您可能会看到错误状态代码以及 SAML 断言中设置映射器所需的实际属性名称和值。例如,如果 NameID 格式无法识别,AD FS 将返回包含 urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy 状态代码的 SAML 响应。
作为第二种方法,请检查日志。对于 AD FS,日志在事件查看器的应用程序和服务日志 → AD FS → 管理员下可用。在 Keycloak 中,您可以通过 jboss-cli.sh 连接到正在运行的 Keycloak 实例并输入以下命令来启用 SAML 处理的跟踪:
然后,您将能够在 Keycloak 服务器日志中找到 SAML 消息和与代理相关的 SAML 处理消息。
如果您遇到困难,请随时在 Keycloak 用户论坛 邮件列表中提出问题。
由于总有改进的空间,如果您发现本文档有任何问题或有任何建议,请随时留下评论!