Single sign on 在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服务器上)打开会话时,它也起作用,

我使用SPNEGO来实现SSO解决方案。在配置过程中,我需要分两步使用域用户凭据:

  • 在我的应用程序的
    web.xml
    中:

    
    spnego.preauth.username
    我的用户
    spnego.preauth.password
    我的密码
    
  • setspn
    命令中:
    setspn-A myuser

  • 当我使用此配置时,Java应用程序使用getRemoteUser()检索用户“myuser”的用户名。因此,SSO运行良好。但当我尝试与其他用户(在同一台windows服务器上)打开会话时,它也起作用,所以我有点困惑。这让我想到了这些问题:


    为什么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请求SPN
    HTTP/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在幕后进行的帐户映射。

    您的问题列表实际上是一个问题。我让它看起来也是这样。这很重要,因为网站不欢迎问题列表。此外,正确缩进代码。我也解决了这个问题,这是一个非常完整的答案。非常感谢你。