我在使用 Kerberos 身份验证进行连接时遇到问题。如果我将 linux kinit 与我的自定义 KRB5.conf(连接到 Windows kerberos AD)一起使用,一切都会顺利进行。
kinit -kVt <MYKEYTAB> <MY_PRINC> -v
keytab specified, forcing -k
Using default cache: /tmp/krb5cc_11574
Using principal: HTTP/<MY_PRINC>@MBID.CZ
Using keytab: <MYKEYTAB>
Authenticated to Kerberos v5
之后,我可以顺利地使用 curl 对注册了我的用户名的 Web 应用程序进行身份验证:
curl -kLv -i --negotiate -u: "https://someserver/someapi/someoperation"
我得到了想要的回应。
但是如果我使用 jdk 中的 java kinit 工具(代码中出现同样的问题),它说我有问题
kinit -J-Dsun.security.krb5.debug=true -J-D"java.security.krb5.conf=<KRB5_CONF_LOCATION>" -t <MYKEYTAB> <MY_PRINC>
问题是:
>>>KRBError:
sTime is Thu Feb 27 07:14:38 CET 2020 1582784078000
suSec is 280585
error code is 25
error Message is Additional pre-authentication required
sname is krbtgt/<DOMAIN>@<DOMAIN>
eData provided.
msgType is 30
>>>Pre-Authentication Data:
PA-DATA type = 19
PA-ETYPE-INFO2 etype = 18, salt = SALT_FROM_PRINC, s2kparams = null
当我尝试对服务器“ https://someserver/someapi/someoperation ”进行身份验证时,这会导致 401 未经授权
两种 kinit 使用完全相同的 keytab、principal 和 krb5.config 文件,只有 unix 有效。
非常感谢!