8.4. Kerberos
Red Hat Single Sign-On 支持通过 Simple 和 Protected GSSAPI Negotiation Mechanism (SPNEGO)协议进行 Kerberos 票据登录。SPNEGO 在用户进行身份验证后通过 Web 浏览器进行透明验证。对于非 Web 情况,或在登录过程中无法使用一个 ticket,Red Hat Single Sign-On 支持使用 Kerberos 用户名和密码登录。
Web 身份验证的典型用例如下:
- 用户登录桌面。
- 用户使用浏览器访问由 Red Hat Single Sign-On 保护的 Web 应用。
- 应用重定向到 Red Hat Single Sign-On 登录。
-
Red Hat Single Sign-On 会呈现 HTML 登录屏幕,状态为 401 和 HTTP 标头
WWW-Authenticate: Negotiate
-
如果浏览器有来自桌面登录的 Kerberos 票据,浏览器会将桌面登录信息传送到标题
授权中的 Red Hat Sign-On: Negotiate 'spnego-token'
。否则,它会显示标准登录屏幕,用户输入登录凭证。 - Red Hat Single Sign-On 从浏览器中验证令牌并验证用户。
- 如果将 LDAPFederationProvider 与 Kerberos 验证支持搭配使用,红帽单点登录从 LDAP 中置备用户数据。如果使用 KerberosFederationProvider,Red Hat Single Sign-On 允许用户更新配置集并预先填充登录数据。
- 红帽单点登录返回应用程序。Red Hat Single Sign-On,应用程序通过 OpenID Connect 或 SAML 消息进行通信。红帽单点登录充当 Kerberos/SPNEGO 登录的代理。因此,应用程序会隐藏通过 Kerberos 进行 Red Hat Single Sign-On 验证。
执行以下步骤设置 Kerberos 身份验证:
- Kerberos 服务器的设置和配置。
- Red Hat Single Sign-On 服务器的设置和配置。
- 客户端机器的设置和配置。
8.4.1. Kerberos 服务器设置 复制链接链接已复制到粘贴板!
设置 Kerberos 服务器的步骤取决于操作系统(OS)和 Kerberos 供应商。有关设置和配置 Kerberos 服务器的说明,请参阅 Windows Active Directory、MIT Kerberos 和您的 OS 文档。
在设置过程中,执行以下步骤:
- 在 Kerberos 数据库中添加一些用户主体。您还可以将 Kerberos 与 LDAP 集成,以便从 LDAP 服务器置备用户帐户。
为 "HTTP" 服务添加服务主体。例如,如果 Red Hat Single Sign-On 服务器在
www.mydomain.org
上运行,请添加服务主体HTTP/www.mydomain.org@<kerberos realm>
。在 MIT Kerberos 中,您将运行"kadmin"会话。在带有 MIT Kerberos 的机器中,您可以使用以下命令:
sudo kadmin.local
sudo kadmin.local
然后,使用命令添加 HTTP 主体并将其密钥导出到 keytab 文件中,例如:
addprinc -randkey HTTP/www.mydomain.org@MYDOMAIN.ORG ktadd -k /tmp/http.keytab HTTP/www.mydomain.org@MYDOMAIN.ORG
addprinc -randkey HTTP/www.mydomain.org@MYDOMAIN.ORG
ktadd -k /tmp/http.keytab HTTP/www.mydomain.org@MYDOMAIN.ORG
在运行 Red Hat Single Sign-On 的主机上,确保 keytab 文件 /tmp/http.keytab
可访问。
8.4.2. 设置和配置 Red Hat Single Sign-On 服务器 复制链接链接已复制到粘贴板!
在机器上安装 Kerberos 客户端。
流程
- 安装 Kerberos 客户端。如果您的机器运行 Fedora、Ubuntu 或 RHEL,请安装 freeipa-client 软件包,其中包含 Kerberos 客户端和其他实用程序。
配置 Kerberos 客户端(在 Linux 中,配置设置位于 /etc/krb5.conf 文件中)。
将您的 Kerberos 域添加到配置中,并配置服务器运行的 HTTP 域。
例如,对于 MYDOMAIN.ORG 域,您可以配置
domain_realm
部分,如下所示:[domain_realm] .mydomain.org = MYDOMAIN.ORG mydomain.org = MYDOMAIN.ORG
[domain_realm] .mydomain.org = MYDOMAIN.ORG mydomain.org = MYDOMAIN.ORG
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 HTTP 主体导出 keytab 文件,并确保运行 Red Hat Single Sign-On 服务器的进程可以访问该文件。对于生产环境,请确保此文件只可由这个进程读取。
对于以上 MIT Kerberos 示例,我们将 keytab 导出到
/tmp/http.keytab
文件。如果您的 密钥分发中心(KDC) 和 Red Hat Single Sign-On 在同一主机上运行,则该文件已可用。
8.4.2.1. 启用 SPNEGO 处理 复制链接链接已复制到粘贴板!
默认情况下,Red Hat Single Sign-On 禁用 SPNEGO 协议支持。要启用它,请转至 浏览器流 并启用 Kerberos。
浏览器流
将 禁用的 Kerberos 要求设置为 备选 (Kerberos 是可选的)或 必需 (浏览器必须启用 Kerberos)。如果您尚未将浏览器配置为与 SPNEGO 或 Kerberos 一起使用,Red Hat Single Sign-On 将回退到常规登录屏幕。
8.4.2.2. 配置 Kerberos 用户存储联合 providerx 复制链接链接已复制到粘贴板!
现在,您必须使用 User Storage Federation 来配置 Red Hat Single Sign-On 如何解释 Kerberos 票据。有两个不同的联合供应商提供 Kerberos 身份验证支持。
要通过 LDAP 服务器支持的 Kerberos 进行身份验证,请配置 LDAP Federation Provider。
流程
进入 LDAP 供应商的配置页面。
LDAP kerberos 集成
- 将允许 Kerberos 身份验证 切换到 ON
允许 Kerberos 身份验证 使 Red Hat Single Sign-On 使用 Kerberos 主体访问用户信息,以便信息可以导入到红帽单点登录环境中。
如果 LDAP 服务器没有备份您的 Kerberos 解决方案,请使用 Kerberos User Storage Federation Provider。
流程
- 点菜单中的 User Federation。
从 Add provider 中选择 Kerberos。
Kerberos 用户存储供应商
Kerberos 供应商解析 Kerberos ticket 用于简单主体信息,并将信息导入到本地 Red Hat Single Sign-On 数据库中。用户配置集信息(如名字、姓氏和电子邮件)不会被调配。
8.4.3. 设置和配置客户端机器 复制链接链接已复制到粘贴板!
客户端机器必须具有 Kerberos 客户端并设置 krb5.conf
,如上所述。客户端机器必须在其浏览器中启用 SPNEGO 登录支持。如果您使用的是 Firefox 浏览器,请参阅 为 Kerberos 配置 Firefox。
.mydomain.org
URI 必须位于 network。协商-auth.trusted-uris
配置选项。
在 Windows 域中,客户端不需要调整其配置。Internet Explorer 和 Edge 已经参与 SPNEGO 身份验证。
8.4.4. 凭证委托 复制链接链接已复制到粘贴板!
Kerberos 支持凭据委派。应用程序可能需要访问 Kerberos ticket,以便可以重新使用它与 Kerberos 保护的其他服务交互。因为 Red Hat Single Sign-On 服务器处理 SPNEGO 协议,所以您必须将 GSS 凭证传播到 OpenID Connect 令牌声明或 SAML 断言属性中的应用程序。Red Hat Single Sign-On 从 Red Hat Single Sign-On 服务器将其传输到您的应用程序。要将此声明插入到令牌或断言中,每个应用程序都必须启用内置协议映射程序 gss delegation 凭据
。此 映射程序 位于应用程序客户端页面的"映射程序"选项卡中。如需了解更多详细信息 ,请参阅协议映射程序 章节。
应用程序必须反序列化它从 Red Hat Single Sign-On 接收的声明,然后才能向其他服务发出 GSS 调用。当您将凭证从访问令牌映射到 GSSCredential 对象时,使用传递给 GSSManager.createContext
方法创建 GSSContext。例如:
在 krb5.conf
文件中配置 forwardable
Kerberos 票据,并在浏览器中添加对授权凭证的支持。
委派具有安全隐患,因此仅在需要且仅在 HTTPS 中使用它。有关更多详细信息和示例,请参阅本文。
8.4.5. 跨域信任 复制链接链接已复制到粘贴板!
在 Kerberos 协议中,realm
是一组 Kerberos 主体。这些主体的定义存在于 Kerberos 数据库中,通常是 LDAP 服务器。
Kerberos 协议允许跨域信任。例如,如果存在 2 个 Kerberos 域、A 和 B,那么跨域信任将允许 realm A 的用户访问 realm B 的资源。realm B 信任域 A.
Kerberos 跨域信任
Red Hat Single Sign-On 服务器支持跨域信任。要做到这一点,请执行以下操作:
-
为跨域信任配置 Kerberos 服务器。实施此步骤取决于 Kerberos 服务器实现。此步骤是将 Kerberos 主体
krbtgt/B@A
添加到 realm A 和 B 的 Kerberos 数据库中。这个主体必须在 Kerberos 域上都有相同的密钥。主体必须在两个域中都有相同的密码、密钥版本号和密码。详情请查看 Kerberos 服务器文档。
默认情况下,跨域信任是单向。您必须将主体 krbtgt/A@B
添加到 Kerberos 数据库,以便在域 A 和域 B 之间进行双向信任。但是,默认情况下信任是传输的。如果 realm B 信任域 A 和 realm C 信任域 B,那么 realm C 信任域 A 不使用主体 krbtgt/C@A
,可用。Kerberos 客户端中可能需要其他配置(例如 capaths
),以便客户端能够找到信任路径。详情请查看 Kerberos 文档。
配置红帽单点登录服务器
-
当使用带有 Kerberos 支持的 LDAP 存储供应商时,为域 B 配置服务器主体,如下例所示:
HTTP/mydomain.com@B
。如果域 A 中的用户成功向 Red Hat Single Sign-On 进行身份验证,LDAP 服务器必须查找来自 realm A 的用户,因为红帽单点登录必须执行 SPNEGO 流,然后查找用户。
-
当使用带有 Kerberos 支持的 LDAP 存储供应商时,为域 B 配置服务器主体,如下例所示:
查找用户基于 LDAP 存储供应商选项 Kerberos 主体属性
。当为实例配置了类似 userPrincipalName
的值的实例时,在用户 john@A
的 SPNEGO 身份验证后,Red Hat Single Sign-On 将尝试查找与 john@A
等效属性 userPrincipalName
的 LDAP 用户。如果 Kerberos 主体属性
留空,则 Red Hat Single Sign-On 将根据其 kerberos 主体的前缀并使用域省略来查找 LDAP 用户。例如,Kerberos 主体用户 john@A
必须在用户名 john
下的 LDAP 中可用,因此通常位于 LDAP DN 下,如 uid=john,ou=People,dc=example,dc=com
。如果您希望域 A 和 B 中的用户进行身份验证,请确保 LDAP 可以从 realms A 和 B 中查找用户。
-
当使用 Kerberos 用户存储供应商(通常是没有 LDAP 集成)时,将服务器主体配置为
HTTP/mydomain.com@B
,并且来自 Kerberos 域 A 和 B 的用户必须能够进行身份验证。
支持多个 Kerberos 域中的用户,因为每个用户都有属性 KERBEROS_PRINCIPAL
引用用于身份验证的 kerberos 主体,这用于进一步查找此用户。为了避免在 kerberos realm A
和 B
中用户 john
时存在冲突,Red Hat Single Sign-On 用户的用户名可能包含 kerberos 域小写。例如,用户名将是 john@a
。仅在 realm 与配置的 Kerberos 域
匹配时,可能会从生成的用户名中省略 realm 后缀。例如,只要 Kerberos 提供程序上配置了 Kerberos 域是 A,即
Kerberos
主体 john
@A
的 john。
8.4.6. 故障排除 复制链接链接已复制到粘贴板!
如果出现问题,请启用额外的日志记录来调试问题:
-
在 Kerberos 或 LDAP 联合供应商的管理控制台中启用
Debug
标记 -
为类别
org.keycloak
启用 TRACE logging,以在服务器日志中接收更多信息 -
添加系统属性
-Dsun.security.krb5.debug=true
和-Dsun.security.spnego.debug=true