我正在运行两个由Spring Security Kerberos保护的示例web应用程序。登录到一个应用程序后,我希望另一个应用程序不需要登录。以下是我的设置细节:
在Ubuntu Linux上,我已经按照本文档安装并配置了Kerberos。我用定义域MYDOMAIN.LOCAL
代替了EXAMPLE.ORG
。这是我的krb5.conf:
[libdefaults]
default_realm = MYDOMAIN.LOCAL
kdc_tcp_port = 12345
kdc_udp_port = 12345
# The following krb5.conf variables are only for MIT Kerberos.
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
# The following libdefaults parameters are only for Heimdal Kerberos.
fcc-mit-ticketflags = true
[realms]
MYDOMAIN.LOCAL = {
kdc = localhost
admin_server = localhost
}
我还增加了两个服务主体:HTTP/subdomain1.mydomain.local@MYDOMAIN.LOCAL
和HTTP/subdomain2.mydomain.local@MYDOMAIN.LOCAL
。
然后我按照这个文档构建这个Spring Security Kerberos示例代码。
我用不同的配置参数运行了这个示例应用的两个实例:
应用1
server:
port: 9122
app:
service-principal: HTTP/subdomain1.mydomain.local@MYDOMAIN.LOCAL
keytab-location: /tmp/tomcat.keytab
应用2
server:
port: 9123
app:
service-principal: HTTP/subdomain2.mydomain.local@MYDOMAIN.LOCAL
keytab-location: /tmp/tomcat2.keytab
两个应用实例都运行在承载Kerberos (KDC)实例的同一台Linux机器上。
在我的本地Windows机器上,我根据这个配置了Firefox。我设置了network.negotiate-auth.trusted-uris=http://subdomain1.mydomain.local,http://subdomain2.mydomain.local
我将我的主机文件(Windows机器)指向subdomain2.mydomain。local指向与subdomain1.mydomain相同的IP地址。本地(因为我的DNS不知道subdomain2)。
使用Firefox,我导航到http://subdomain1.mydomain.local/hello
,这是安全的。不出所料,我得到了登录页面。我以user1的身份登录,得到了hello页面(显示"hello user1@MYDOMAIN.LOCAL")。
在另一个Firefox选项卡上,我导航到http://subdomain2.mydomain.local/hello
。系统提示我重新登录。为什么?
您是否使用相同的linux kdc登录windows计算机?正如我理解你的帖子,kdc不是AD域控制器。因此,如果您独立登录(Windows家庭版),Windows将不会生成可能与您的kdc匹配的协商令牌。Kerberos是一种三角信任,因此kdc必须信任转发请求的客户机(windows)和tomcat服务器。只有这样,spring安全票证验证器才能接受从firefox发送的令牌。
请考虑以下两个选项
-
- 如果您正在尝试跨域并期望相同的登录令牌工作,那么请考虑您的方法/解决方案,并设置单点登录
-
- 现在如果你有windows强迫你重新登录的问题,它可能是一个
trust
&configuration
问题。
- 现在如果你有windows强迫你重新登录的问题,它可能是一个