我正在尝试设置一个 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
此应用程序服务器需要将用户的凭据委托(delegate)给另一个名为“anotherserver.mycompany.com”的服务器这对我和一些用户来说效果很好;但对于其他一些用户组,它不起作用,并且会引发有关特定于该服务器的委托(delegate)的错误:RequireDelegationStrategy.login。 我更改了 krb5 文件中的 domain_realm 条目,我可以通过更改它来使用我自己的凭据重现该问题:
[domain_realm]
.mycompany.com = .MYCOMPANY.COM
mycompany.com = MYCOMPANY.COM
注意我添加了一个“.”到“MYCOMPANY.COM”条目。我可以摆脱“。”然后它恢复正常工作。因此,这让我认为问题必须与该特定条目相关,并且我可能必须为该特定服务器添加一个条目。我如下所示添加了它,但它对任何用户都不起作用。我们都遇到了相同的委托(delegate)错误:
[domain_realm]
.mycompany.com = MYCOMPANY.COM
mycompany.com = MYCOMPANY.COM
anotherserver.mycompany.com = ANOTHERSERVER.MYCOMPANY.COM
我的问题是,我是否缺少在文件中添加此条目的语法?如果是这样,将这些服务器添加到域 relam 中的正确语法是什么?
最佳答案
请删除 krb5.conf [domain_realm] 部分下的 anotherserver.mycompany.com = ANOTHERSERVER.MYCOMPANY.COM
行,它不属于那里。该部分仅适用于 Kerberos 领域名称,不适用于服务器名称。
根据问题陈述,我认为您的 Kerberos 委派设置正确。否则,Kerberos 身份验证对任何用户都不起作用。
它对某些用户有效但并非对所有用户有效的事实告诉我问题出在其他地方。身份验证之后是授权,在您的情况下,您是按组进行的。我对 Tomcat 不太熟悉,但我相信在 Tomcat server.xml 或 web.xml 中,您会发现一个或多个定义的角色可能映射到某个目录服务组名称。我认为您可以访问 Tomcat Web 应用程序的用户可能在 server.xml 或 web.xml 中定义的组映射角色中,不在该组中的用户无法授权。
关于tomcat - 领域和域语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48392167/