9.6. SAML v2.0 身份提供程序


红帽构建的 Keycloak 可以根据 SAML v2.0 协议代理身份提供程序。

流程

  1. 单击菜单中的 Identity Providers
  2. Add provider 列表中,选择 SAML v2.0

    添加身份提供程序

    Add Identity Provider

  3. 输入您的初始配置选项。有关配置选项的更多信息,请参阅 常规 IDP 配置
Expand
表 9.3. SAML 配置
配置描述

服务提供程序实体 ID

远程身份提供程序用来识别来自此服务提供商请求的 SAML 实体 ID。默认情况下,此设置设置为 realm base URL < root>/realms/{realm-name}

身份提供程序实体 ID

用于验证收到 SAML 断言的颁发者的实体 ID。如果为空,则不会执行 Issuer 验证。

单点登录服务 URL

启动身份验证过程的 SAML 端点。如果您的 SAML IDP 发布 IDP 实体描述符,则会在那里指定此字段的值。

单个 Logout Service URL

SAML 注销端点。如果您的 SAML IDP 发布 IDP 实体描述符,则会在那里指定此字段的值。

Backchannel Logout

如果您的 SAML IDP 支持返回频道注销,请将这个开关切换到 ON

NameID 策略格式

与名称标识符格式对应的 URI 引用。默认情况下,红帽构建的 Keycloak 把它设置为 urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

主体类型

指定 SAML 断言中的哪些部分将用于识别和跟踪外部用户身份。可以是 Subject NameID 或 SAML 属性(按名称或友好名称)。主题 NameID 值不能与 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient' NameID Policy Format 值一起设置。

主体属性

如果主体类型是 non-blank,此字段指定识别属性的名称("Attribute [Name]")或 friendly name ("Attribute [Friendly Name]")。

允许创建

允许外部身份提供程序创建新标识符来代表主体。

HTTP-POST 绑定响应

控制 SAML 绑定,以响应外部 IDP 发送的任何 SAML 请求。当 OFF 时,红帽构建的 Keycloak 使用重定向绑定。

AuthnRequest 的 HTTP-POST Binding

控制当从外部 IDP 请求身份验证时的 SAML 绑定。当 OFF 时,红帽构建的 Keycloak 使用重定向绑定。

want AuthnRequests Signed

ON 时,红帽构建的 Keycloak 使用域的密钥对签署发送到外部 SAML IDP 的请求。

want Assertions Signed

指明此服务提供商是否需要签名的 Assertion。

want Assertions Encrypted

指明此服务提供商是否需要加密的 Assertion。

签名算法

如果 Want AuthnRequests SignedON,则使用签名算法。请注意,基于 SHA1 的算法已弃用,并可能在以后的发行版本中删除。我们建议使用一些更安全的算法,而不是 *_SHA1。另外,使用 *_SHA1 算法时,如果 SAML 身份提供程序(如红帽构建的 Keycloak 实例在 Java 17 或更高版本上运行)时,验证签名无法正常工作。

加密算法

SAML IDP 用于加密 SAML 文档、断言或 ID 的加密算法。解密 SAML 文档部分的对应解密密钥将根据这种配置的算法进行选择,并应该可用于加密(ENC)使用的域密钥。如果没有配置算法,则允许任何支持的算法,并根据 SAML 文档本身中指定的算法选择解密密钥。

SAML 签名密钥名称

使用 POST 绑定发送的签名 SAML 文档包含 KeyName 元素中的签名密钥标识,该元素默认包含红帽 Keycloak 密钥 ID 的红帽构建。外部 SAML IDP 可以预期不同的密钥名称。此交换机控制 KeyName 是否包含:* KEY_ID - Key ID。* CERT_SUBJECT - 与 realm 键对应的证书的主题。Microsoft Active Directory Federation Services 期望 CERT_SUBJECT.* NONE - 红帽构建的 Keycloak 省略了 SAML 信息中的键名称提示。

强制身份验证

用户必须在外部 IDP 中输入其凭证,即使用户已经登录。

验证签名

ON 时,域要求 SAML 请求和来自外部 IDP 的响应进行数字签名。

元数据描述符 URL

身份提供程序发布 IDPSSODescriptor 元数据的外部 URL。当点 Reload key 或 Import key 操作时,此 URL 用于下载 身份提供程序证书。

使用元数据描述符 URL

ON 时,验证签名的证书会自动从 元数据描述符 URL 下载,并在红帽构建的 Keycloak 中缓存。SAML 提供程序可以通过两种不同的方式验证签名。如果请求特定的证书(通常在 POST 绑定中),且没有在缓存中,则证书会自动从 URL 中刷新。如果请求所有证书来验证签名(REDIRECT 绑定)只有在最大缓存时间后才进行刷新(请参阅所有供应商配置指南中的 public-key-storage spi)。也可以使用身份提供程序页面中的操作 Reload Keys 手动更新缓存。

当选项为 OFF 时,验证 X509 证书中的证书 用于验证签名。

验证 X509 证书

当使用 元数据描述符 URLOFF 时,红帽构建的 Keycloak 用来验证 SAML 请求签名和来自外部 IDP 的响应。可以使用逗号分隔多个证书()。证书可以从 元数据描述符 URL 重新导入,点击身份提供程序页面中的 Import Keys 操作。该操作会在 metadata 端点中下载当前证书,并将它们分配给同一选项的配置。您需要单击 Save 以绝对存储重新导入的证书。

签名服务提供商元数据

ON 时,红帽构建的 Keycloak 使用域的密钥对为 SAML 服务提供商元数据描述符 签名。

传递主题

控制红帽构建的 Keycloak 是否将 login_hint 查询参数转发到 IDP。Red Hat build of Keycloak 将此字段的值添加到 AuthnRequest 的 Subject 中的 login_hint 参数中,以便目标供应商可以预先填充其登录表单。

属性使用服务索引

标识设置为请求到远程 IDP 的属性。红帽构建的 Keycloak 会自动将身份提供程序配置中映射的属性添加到自动生成的 SP 元数据文档中。

属性使用服务名称

自动生成的 SP 元数据文档中公告的属性集合的描述性名称。

您可以通过提供 URL 或指向外部 IDP 实体描述符的 URL 或文件来导入所有配置数据。如果您要连接到红帽构建的 Keycloak 外部 IDP,您可以从 URL < root>/realms/{realm-name}/protocol/saml/descriptor 导入 IDP 设置。这个链接是一个 XML 文档,描述了有关 IDP 的元数据。您还可以通过提供指向外部 SAML IDP 实体描述符的 URL 或 XML 文件来导入所有这些配置数据。

9.6.1. 请求特定的 AuthnContexts

身份提供程序有助于客户端在验证用户身份的身份验证方法中指定限制。例如,询问 MFA、Kerberos 身份验证或安全要求。这些限制使用特定的 AuthnContext 标准。客户端可以请求一个或多个条件,并指定身份提供程序必须与请求的 AuthnContext、精确或满足其他等效条件匹配。

您可以通过在 Requested AuthnContext Constraints 部分添加 ClassRefs 或 DeclRefs 来列出您的服务提供商所需的条件。通常,您需要提供 ClassRefs 或 DeclRefs,因此请检查您的身份提供程序文档支持哪些值。如果没有 ClassRefs 或 DeclRefs,则身份提供程序不会强制实施额外的限制。

Expand
表 9.4. 请求的 AuthnContext 限制
Configuration描述

比较

身份提供程序用于评估上下文要求的方法。可用值有 ExactMinimumMaximum、或 Better。默认值为 Exact

AuthnContext ClassRefs

AuthnContext ClassRefs 描述所需条件。

AuthnContext DeclRefs

AuthnContext DeclRefs 描述所需标准。

9.6.2. SP Descriptor

当您访问供应商的 SAML SP 元数据时,请在身份提供程序配置设置中查找 Endpoints 项。它包含一个 SAML 2.0 Service Provider Metadata 链接,用于为服务提供商生成 SAML 实体描述符。您可以下载描述符或复制其 URL,然后将其导入到远程身份提供程序。

通过转至以下 URL,也可以公开提供此元数据:

http[s]://{host:port}/realms/{realm-name}/broker/{broker-alias}/endpoint/descriptor
Copy to Clipboard Toggle word wrap

确保您在访问描述符前保存任何配置更改。

9.6.3. 在 SAML 请求中发送主题

默认情况下,指向 SAML 身份提供程序的社交按钮将用户重定向到以下登录 URL:

http[s]://{host:port}/realms/${realm-name}/broker/{broker-alias}/login
Copy to Clipboard Toggle word wrap

在此 URL 中添加名为 login_hint 的查询参数,将参数的值作为 Subject 属性添加到 SAML 请求中。如果此查询参数为空,红帽构建的 Keycloak 不会对请求添加主题。

启用 "Pass subject" 选项,以在 SAML 请求中发送主题。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat