4.5. 使用 Kerberos 为 Web 应用提供 SSO
此情景演示了如何将 Kerberos 与 JBoss EAP 搭配使用,以便为 Web 应用提供 SSO。JBoss EAP 实例已经创建,即 EAP1
,它作为单机服务器运行。已将 sampleAppA
和 sampleAppB 这两个
Web 应用部署到 EAP1
。Web 应用和 EAP1
都已配置为通过 Kerberos 使用基于桌面的 SSO 进行身份验证。
4.5.1. 安全性 复制链接链接已复制到粘贴板!
JBoss EAP 使用 SPNEGO
身份验证方法通过 Kerberos 提供身份验证。有关 Kerberos 和 SPNEGO 细节的更多信息,请参阅第三方 SSO 实施部分。为了使 JBoss EAP 和部署的 Web 应用能够使用 Kerberos 进行身份验证,请创建一个 kerberos-security-factory
来连接 Kerberos 服务器。同时也创建一个安全域、角色映射器和安全域,以便将角色分配给来自 Kerberos 服务器的用户。创建一个 http-authentication-factory
,它使用 kerberos-security-factory
并使用安全域进行身份验证和角色分配。身份验证机制使用 SPNEGO
身份验证机制作为 exampleSpnegoDomain
公开。undertow
子系统也配置为使用 http-authentication-factory
进行身份验证。
sampleAppA
和 sampleAppB
都配置为使用 exampleSpnegoDomain
执行身份验证并获取用户的角色以进行授权。当安全令牌无法从操作系统传递到浏览器 时
,这两个应用也可以将 FORM 身份验证配置为回退身份验证机制。如果 FORM 身份验证
配置为回退,则必须配置额外的身份验证机制以及支持的安全域。此身份验证机制独立于 Kerberos 和 SPNEGO
,仅需支持 FORM 身份验证
。在本例中,已经为 FORM 身份验证
配置了额外的机制和支持安全域,并作为 exampleFormDomain
公开。每个应用都配置为使用 exampleFormDomain
,并提供 FORM 身份验证
作为回退。每个应用程序也被配置为保护路径 /secure/*
,并提供自己的角色列表来处理授权。
4.5.2. 它如何工作 复制链接链接已复制到粘贴板!
在 Kerberos 服务器中创建了以下用户:
username | 密码 |
---|---|
Sande | samplePass |
Andrea | samplePass |
Betty | samplePass |
Chuck | samplePass |
以下角色使用安全域映射到用户:
username | 角色 |
---|---|
Sande | all |
Andrea | A |
Betty | B |
Chuck |
每个应用程序中也配置了以下角色:
应用程序/SP | 允许的角色 |
---|---|
sampleAppA | 所有,A |
sampleAppB | 所有,B |
在启动时,EAP1
加载核心服务,后跟 elytron
和其他子系统。kerberos-security-factory
建立与 Kerberos 服务器的连接。sampleAppA
和 sampleAppB
都已部署,并连接到 exampleSpnegoDomain
和 exampleFormDomain
进行身份验证。
Sande 已登录到使用 Kerberos 保护的计算机。她打开浏览器并尝试访问 sampleAppA/secure/hello.html
。由于这一点是安全的,因此需要进行身份验证。EAP1
指示浏览器向 Kerberos 服务器发送密钥请求,特别是在其计算机上配置的 Kerberos 密钥分发中心。浏览器获取密钥后,它将被发送到 sampleAppA
。sampleAppA
使用 exampleSpnegoDomain
将 ticket 发送到 JBoss EAP,其中将它解包并且身份验证与 kerberos-security-factory
中配置的 Kerberos 服务器一同执行。票据通过身份验证后,Sande 的角色将传回 sampleAppA
以执行授权。由于 Sande 具有 all
角色,因此她将能够访问 sampleAppA/secure/hello.html
。如果 Sande 尝试访问 sampleAppB/secure/hello.html
,则会出现同一个进程。由于她拥有 所有
角色,她将获得访问权限。Andrea 和 Betty 将遵循相同的流程,但 Andrea 只能访问 sampleAppA/secure/hello.html
,并且没有 sampleAppB/secure/hello.html
。Betty 的情况相反,它有权访问 sampleAppB/secure/hello.html
,并且没有 sampleAppA/secure/hello.html
。Chuck 会将身份验证传递给 sampleAppA/secure/hello.html
或 sampleAppB/secure/hello.html
,但不会获得对其的访问权限,因为他没有任何角色。
如果 Sande 试图从没有 Kerberos 保护的计算机访问 sampleAppA/secure/hello.html
,例如,与 Office 网络连接的个人笔记本电脑,她会作为回退定向到 FORM 登录
页面。然后,她的凭据将使用回退身份验证机制进行身份验证,进程将继续获得授权。