如果您的组织使用 Keycloak Identity Provider (IdP)进行用户身份验证,您可以配置 Rancher 来允许您的用户使用他们的 IdP 凭证登录。

  • 您必须有一个。

  • 在 Keycloak 中,创建一个新的 SAML 客户端,设置如下。参见获得帮助。

  • 从 Keycloak 客户端导出文件: 在安装选项卡中,选择SAML Metadata IDPSSODescriptor格式选项并下载文件。

  1. 全局视图中,从主菜单中选择安全 > 认证

  2. 选择Keycloak

  3. 字段描述
    显示名称包含用户 display name 的 AD 属性。
    用户名包含用户 user name/given name 的 AD 属性
    UID对每个用户唯一的 AD 属性。
    为管理组成员身份创建的条目。
    Rancher API 地址Rancher Server 的 URL 地址
    私钥 / 证书密钥/证书对,用于在 Rancher 和 IdP 之间创建安全 shell。
    元数据 XML从您的 IdP 服务器导出的metadata.xml文件。
  4. 完成配置 Keycloak 帐户表单后,单击页面底部的启用 Keycloak 认证进行身份验证。

    Rancher 将重定向到 IdP 登录页面。输入 Keycloak IdP 系统的身份验证凭据,以验证您的 Rancher Keycloak 配置。

结果: Rancher 被配置为使用 Keycloak 认证。您的用户现在可以使用 Keycloak 账号登录 Rancher。

当您点击启用 Keycloak 认证时,没有被重定向到 Keycloak IdP。

  • 验证您的 Keycloak 客户端配置。
  • 确保Force Post Binding设置为OFF

IdP 登录后显示禁止消息

您被正确地重定向到 Keycloak IdP 登录页面,可以输入凭据,但得到一个禁止的消息。

  • 如果日志显示ERROR: either the Response or Assertion must be signed,确保Sign DocumentsSign assertions 在您的 Keycloak 客户端中被设置为ON

这通常是由于只有在配置了 SAML 提供者之后,才会创建元数据。 尝试将 keycloak 配置并保存为您的 SAML 提供者,然后再访问元数据。

Keycloak 错误: “We’re sorry, failed to process response”

  • 检查 Keycloak 日志。
  • 如果日志显示failed: org.keycloak.common.VerificationException: Client does not have a public key,在 Keycloak 客户端中将Encrypt Assertions 设置为。
  • 检查 Keycloak 日志。
  • 如果日志显示request validation failed: org.keycloak.common.VerificationException: SigAlg was null,在 Keycloak 客户端中将Client Signature Required设置为OFF

Keycloak 6.0.0+: 选项中没有 IDPSSODescriptor 设置

Keycloak 6.0.0 及以上版本在“安装”选项卡下不再提供 IDP 元数据。 您仍然可以从以下网址获取 XML:

https://{KEYCLOAK-URL}/auth/realms/{REALM-NAME}/protocol/saml/descriptor

从这个 URL 获得的 XML 包含EntitiesDescriptor作为根元素。Rancher 期望的根元素是EntityDescriptor而不是EntitiesDescriptor。因此,在将此 XML 传递给 Rancher 之前,请按照以下步骤进行调整:

  • 将所有标签从“EntitiesDescriptor”复制到“EntityDescriptor”
  • 从文件开头删除<EntitiesDescriptor>标签。
  • 从 xml 末尾删除</EntitiesDescriptor>
  1. <EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" entityID="https://{KEYCLOAK-URL}/auth/realms/{REALM-NAME}">
  2. ....