5.7. 使用 Kerberos 为 Web 应用程序提供 SSO
此情景演示了如何将 Kerberos 与 JBoss EAP 搭配使用,以便为 Web 应用提供 SSO。JBoss EAP 实例已经创建,即 EAP1
,它作为单机服务器运行。已将 sampleAppA
和 sampleAppB 这两个
Web 应用部署到 EAP1
。Web 应用和 EAP1
都已配置为通过 Kerberos 使用基于桌面的 SSO 进行身份验证。
5.7.1. 安全性 复制链接链接已复制到粘贴板!
JBoss EAP 支持通过 SPNEGO 和 JBoss Negotiation 在 Web 应用程序中使用 Kerberos 作为 SSO。有关 Kerberos 和 SPNEGO 细节的更多信息,请参阅第三方 SSO 实施部分。要让 JBoss EAP 和部署的 Web 应用能够使用 Kerberos 进行身份验证,必须创建两个安全域:第一个安全域 host-domain
配置有 kerberos
登录模块以连接到 Kerberos 服务器。这使得 JBoss EAP 能够在容器级别进行身份验证。第二个安全域 spnego-domain
使用两个登录模块创建。个使用 spnego
登录模块连接到 host-domain 以
验证用户的身份。第二个模块可以使用任何其他登录模块加载用于授权决策的角色信息,例如,UsersRoles
使用属性文件将用户映射到角色。
这两个登录模块也利用 password-stacking 将
授权模块中的用户和角色与身份验证登录模块中的用户映射。EAP1
同时配置 host-domain
和 spnego-domain
。通过 web.xml
和 jboss-web.xml
配置应用,以使用 spnego-domain
进行身份验证并获取用户的角色进行身份验证。如果无法将安全令牌从操作系统传递到浏览器,则应用也可以将 FORM 身份验证配置为回退身份验证机制。如果 FORM 身份验证配置为回退,则必须配置额外的安全域来支持它。此安全域独立于 Kerberos 和 SPNEGO,并且仅支持 FORM 身份验证,即用户名和密码验证以及角色。每个应用都配置为使用 spnego-domain
,并提供 FORM 身份验证作为回退。每个应用程序也被配置为保护路径 /secure/*
,并提供自己的角色列表来处理授权。
5.7.1.1. 它如何工作 复制链接链接已复制到粘贴板!
在 Kerberos 服务器中创建了以下用户:
username | 密码 |
---|---|
Brent | samplePass |
Andy | samplePass |
Bill | samplePass |
ron | samplePass |
以下角色通过一个额外的模块映射到用户,该模块通过将 password-stacking
选项设置为 使用FirstPass
来串联:
username | 角色 |
---|---|
Brent | all |
Andy | A |
Bill | B |
ron |
每个应用程序中也配置了以下角色:
应用程序/SP | 允许的角色 |
---|---|
sampleAppA | 所有,A |
sampleAppB | 所有,B |
在启动时,EAP1
加载核心服务,后跟 security
和其他子系统。host-domain
建立与 Kerberos 服务器的连接,并且 spnego-domain
连接到 host-domain
。sampleAppA
和 sampleAppB
已部署并连接到 spnego-domain
进行身份验证。
Brent 已登录到使用 Kerberos 保护的计算机。他打开浏览器并尝试访问 sampleAppA/secure/hello.html
。由于这一点是安全的,因此需要进行身份验证。EAP1
指示浏览器向 Kerberos 服务器发送密钥请求,特别是在其计算机上配置的 Kerberos 密钥分发中心。浏览器获取密钥后,它将被发送到 simpleAppA
。simpleAppA
将票据发送到 spnego-domain
,该票据被解包,并且身份验证由 host-domain
与配置的 Kerberos 服务器结合使用。票据通过身份验证后,Braent 的角色将传回 simpleAppA
以执行授权。由于 Brent 具有 all
角色,因此他能够访问 sampleAppA/secure/hello.html
。如果 Brent 尝试访问 sampleAppB/secure/hello.html
,则会出现同一个进程。由于他拥有 所有
角色,因此他将获得访问权限。Andy 和 Bill 将遵循同样的过程,但 Andy 只能访问 sampleAppA/secure/hello.html
,并且没有 sampleAppB/secure/hello.html
。Bill 将是相反的,它有权访问 sampleAppB/secure/hello.html
且没有 sampleAppA/secure/hello.html
。Ron 会将身份验证传递给 sampleAppA/secure/hello.html
或 sampleAppB/secure/hello.html
,但不会获得对它的访问权限,因为他没有角色。
如果 Andy 试图从未由 Kerberos 保护的计算机访问 sampleAppA/secure/hello.html
,例如连接到 Office 网络的个人笔记本电脑,他将被定向到 FORM 登录页面,作为回退登录机制。然后,他的凭据将通过回退安全域进行身份验证,进程将继续获得授权。
更新于 2024-02-09