为什么SSO不能与使用Spring Security的Kerberos一起工作?



我正在运行两个由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.LOCALHTTP/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发送的令牌。

请考虑以下两个选项

    1. 如果您正在尝试跨域并期望相同的登录令牌工作,那么请考虑您的方法/解决方案,并设置单点登录
    1. 现在如果你有windows强迫你重新登录的问题,它可能是一个trust&configuration问题。

相关内容

  • 没有找到相关文章

最新更新