我使用代码here从Kerberos令牌获取身份验证信息。在那里,我已经配置了domainUsername和domainUserPassword,并按照readme.md中的指定运行它。
然后,从AD域中的浏览器,我连接到http://server:8080/spnego,我在打开的页面上看到我的用户名@ domain。该页面还应包含我的用户所属的AD组的SID。
查看服务器日志,我看到:
org.jaaslounge.decoding.DecodingException: Malformed PAC logon info.
at org.jaaslounge.decoding.pac.PacLogonInfo.<init>(PacLogonInfo.java:209)
at org.jaaslounge.decoding.pac.Pac.<init>(Pac.java:45)
at org.jaaslounge.decoding.kerberos.KerberosPacAuthData.<init>(KerberosPacAuthData.java:13)
at org.jaaslounge.decoding.kerberos.KerberosAuthData.parse(KerberosAuthData.java:21)
at org.jaaslounge.decoding.kerberos.KerberosRelevantAuthData.<init>(KerberosRelevantAuthData.java:41)
at org.jaaslounge.decoding.kerberos.KerberosAuthData.parse(KerberosAuthData.java:18)
at org.jaaslounge.decoding.kerberos.KerberosEncData.<init>(KerberosEncData.java:136)
at org.jaaslounge.decoding.kerberos.KerberosTicket.<init>(KerberosTicket.java:103)
at org.jaaslounge.decoding.kerberos.KerberosApRequest.<init>(KerberosApRequest.java:62)
at org.jaaslounge.decoding.kerberos.KerberosToken.<init>(KerberosToken.java:52)
at com.example.ManualSpnegoNegotiateServlet.attemptNegotiation(ManualSpnegoNegotiateServlet.java:271)
第271行是以下
KerberosToken token = new KerberosToken(kerberosTokenData, keys);
该错误消息过于模糊。我不知道如何继续,我从不同的客户那里得到同样的错误。
有人对此有任何提示吗?
答案 0 :(得分:1)
我自己想出了这个。事实证明,消息“格式错误的PAC登录信息”实际上是正确的。尝试获取“资源组数据”时代码失败。
最初,我认为PAC_LOGON_INFO structure自上次jaaslounge implementation编写以来(2010年的某个地方)发生了变化。我认为这是因为MS-PAC specification根本没有提到它。
实际上,问题来自一个完全不同的地方:KDC。它运行在Win Server 2012上,默认情况下Microsoft添加了resource SID Compression。
你有它,如果你关闭KDC上的资源SID压缩,一切都会开始工作(不需要触摸任何其他内容,即jaaslounge的版本或无限制地修补hava JCE政策)。