0

我正在尝试设置一个 tomcat 服务器来使用 Kerberos 身份验证。此服务器是 Spotfire 应用程序服务器的基础。我像这样设置我的 krb5.config 文件:

[libdefaults]
    default_realm = MYCOMPANY.COM
    default_keytab_name = mykeytab.keytab
    default_tkt_enctypes = aes128-cts rc4-hmac
    default_tgs_enctypes = aes128-cts rc4-hmac
    forwardable = true

[realms]
    MYCOMPANY.COM = {
        kdc = myserver03.mycompany.com
        kdc = myserver04.mycompany.com
        admin_server = myserver03.mycompany.com
        default_domain = mycompany.com
    }

[domain_realm]    
    .mycompany.com = MYCOMPANY.COM
    mycompany.com = MYCOMPANY.COM

[appdefaults]
    autologin = true
    forward = true
    forwardable = true
    encrypt = true

此应用程序服务器需要将用户的凭据委托给另一个名为“anotherserver.mycompany.com”的服务器这对我和某些用户来说效果很好;但是对于其他一些用户组,它不起作用,并且会触发有关特定于该服务器的委托的错误:RequireDelegationStrategy.login。我更改了 krb5 文件中的 domain_realm 条目,我可以使用自己的凭据重现该问题,只需更改以下内容:

[domain_realm]    
        .mycompany.com = .MYCOMPANY.COM
        mycompany.com = MYCOMPANY.COM

请注意,我添加了一个“。” 到“MYCOMPANY.COM”条目。我可以摆脱“。” 并恢复正常工作。因此,这让我认为该问题必须与该特定条目有关,并且我可能必须为该特定服务器添加一个条目。我如下所示添加了它,然后它对任何用户都不起作用。我们都遇到了相同的委派错误:

[domain_realm]    
        .mycompany.com = MYCOMPANY.COM
        mycompany.com = MYCOMPANY.COM
        anotherserver.mycompany.com = ANOTHERSERVER.MYCOMPANY.COM

我的问题是,我是否缺少在文件中添加此条目的语法?如果是这样,在域 relam 中添加这些服务器的正确语法是什么?

4

1 回答 1

0

请删除anotherserver.mycompany.com = ANOTHERSERVER.MYCOMPANY.COMkrb5.conf 的 [domain_realm] 部分下的行,它不属于那里。该部分仅适用于 Kerberos 领域名称,不适用于服务器名称。

根据问题陈述,我认为您的 Kerberos 委派设置正确。如果不是,Kerberos 身份验证对任何用户都不起作用。

它适用于某些用户但并非全部用户的事实告诉我问题出在其他地方。身份验证后是授权,在您的情况下,您是按组进行的。我对 Tomcat 不是很熟悉,但我相信在 Tomcat server.xml 或 web.xml 中,您会发现定义了一个或多个角色,这些角色可能映射到某个目录服务组名称。我认为您可以访问 Tomcat Web 应用程序的用户可能是在 server.xml 或 web.xml 中定义的组映射的角色,不在该组中的用户授权失败。

于 2018-01-23T14:56:42.207 回答