首页 > 解决方案 > java Kerberos - unix kinit 有效,java 无效 - 需要额外的预认证

问题描述

我在使用 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 有效。

非常感谢!

标签: javakerberospre-authentication

解决方案


推荐阅读