Single sign on 在SPNEGO SSO配置中,预授权用户有什么用途?
我使用SPNEGO来实现SSO解决方案。在配置过程中,我需要分两步使用域用户凭据:Single sign on 在SPNEGO SSO配置中,预授权用户有什么用途?,single-sign-on,kerberos,spnego,spn,Single Sign On,Kerberos,Spnego,Spn,我使用SPNEGO来实现SSO解决方案。在配置过程中,我需要分两步使用域用户凭据: 在我的应用程序的web.xml中: spnego.preauth.username 我的用户 spnego.preauth.password 我的密码 在setspn命令中:setspn-A myuser 当我使用此配置时,Java应用程序使用getRemoteUser()检索用户“myuser”的用户名。因此,SSO运行良好。但当我尝试与其他用户(在同一台windows服务器上)打开会话时,它也起作用,
web.xml
中:
spnego.preauth.username
我的用户
spnego.preauth.password
我的密码
setspn
命令中:setspn-A myuser
为什么SSO适用于域的所有其他用户?我是否必须在web.xml和setspn命令中使用相同的用户?选择哪个用户?在Kerberos场景中SPN的确切用途是什么?我是否必须在每台windows计算机上执行setspn命令,或者有一种方法只执行一次?此帐户是Kerberos中定义服务器标识的部分内容 Kerberos是一种对称密钥协议。每个用户都有一个在用户和KDC之间共享的对称密钥,类似地,每个服务(接受者)都有一个在服务和KDC之间共享的对称密钥 当用户请求特定“服务主体”的票证时,KDC将返回使用该服务密钥加密的票证。因此,为了让服务解密这些Kerberos票据,它还需要某种方法来知道与其自己的服务主体关联的密钥 通常,服务密钥是随机生成的,并通过“keytab”文件提供。但是,在Active Directory系统中,大多数服务帐户都是具有密码的常规用户帐户,因此它们的密钥可以从服务的密码中派生 似乎您的SPNEGO模块(参见第150-160行)可以为其提供一个键或密码 在任何情况下,该设置与将连接到您的服务的客户端完全无关。它只建立服务器自己的标识 在Kerberos场景中SPN的确切用途是什么 它类似于HTTPS证书中的域名字段。例如,当浏览器对
https://example.com
,它将始终从KDC请求SPNHTTP/example.com
的Kerberos票证
如果您熟悉OAuth2、SAML或JWTs,我相信Kerberos SPN大致相当于SAML断言中的“观众”字段,或JWTs中的“aud”字段
(请注意,浏览器仅通过其SPN了解您的服务,而不关心幕后使用的实际服务帐户–例如,在这种情况下,Active Directory碰巧将SPN映射到真实的“用户”帐户,但其他Kerberos实现的做法不同)
我是否必须在web.xml和setspn命令中使用相同的用户
是的,它必须是同一个用户,因为服务必须能够解密为其SPN颁发的票证,所以它需要知道相同的对称密钥
选择哪个用户
为该服务创建一个新的专用帐户不要使用真实的“个人”帐户
使用长且高度随机的密码,并将其标记为非过期密码。此外,确保在帐户的选项中启用“帐户支持Kerberos AES xxx位”功能(假设您的Java SPNEGO支持AES,它确实应该支持AES)
我是否必须在每台windows计算机上执行setspn命令,或者有一种方法只执行一次
不,无论在何处执行它,因为它只编辑域控制器上的实际帐户–它在本地计算机上没有留下任何跟踪。(具体来说,它为提供的帐户设置servicePrincipalName
LDAP属性。)
客户只通过其SPN识别您的服务,他们不需要知道KDC在幕后进行的帐户映射。您的问题列表实际上是一个问题。我让它看起来也是这样。这很重要,因为网站不欢迎问题列表。此外,正确缩进代码。我也解决了这个问题,这是一个非常完整的答案。非常感谢你。