我正在使用使用MIT Kerberos进行身份验证的Windows应用程序。MIT Kerberos无法在MSLSA缓存中找到TGT
如果一个用户登录到Windows域用户帐户,klist
表明他会从广告预期的门票,包括这一个:
#1> Client: jalf @ TESTREALM.COM
Server: krbtgt/TESTREALM.COM @ TESTREALM.COM
KerbTicket Encryption Type: RSADSI RC4-HMAC(NT)
Ticket Flags 0x40e00000 -> forwardable renewable initial pre_authent
Start Time: 1/12/2012 9:46:27 (local)
End Time: 1/12/2012 19:46:27 (local)
Renew Time: 1/19/2012 9:46:27 (local)
Session Key Type: RSADSI RC4-HMAC(NT)
然而,当我们尝试用这张票我们的应用程序,Kerberos库似乎没有找到那个。
下面是相关的代码的简化版本:
// Open the MSLSA cache
krb5_cc_resolve(kcontext, "MSLSA:", &mslsa_ccache);
// Create a cursor for traversing the cache
krb5_cc_start_seq_get(kcontext, mslsa_ccache, &cursor);
// Check all the credentials in the cache
while (!(code = krb5_cc_next_cred(kcontext, mslsa_ccache, &cursor, &creds))) {
// Find the one with the INITIAL flag set
if (creds.ticket_flags & TKT_FLG_INITIAL) {
// ticket found
krb5_free_cred_contents(kcontext, &creds);
break;
}
krb5_free_cred_contents(kcontext, &creds);
}
krb5_cc_end_seq_get(kcontext, mslsa_ccache, &cursor);
但无论出于何种原因,我们不会进入// ticket found
部分。 运行在调试器的代码,我可以看到它找到几张由klist
所示的其他门票,但由于某种原因它永远不会找到一个我们感兴趣的问题。
任何人都可以解释这种现象,或如何解决它?天真地说,我期望klist
的输出匹配krb5_cc_next_cred
迭代缓存的结果。
我对Kerberos比较陌生,并且从离开的同事那里继承了这段代码,所以可能我错过了一些重要的基本信息。
+1,谢谢,非常有帮助。这似乎是问题。我需要在周一进行更多测试,如果一切顺利,我会接受答案。 :) – jalf 2012-01-13 16:03:16
它与破解工作? – 2012-01-16 16:37:55
似乎喜欢它。这仍然有点不稳定,但这似乎是一个不同的问题。当您登录到Windows帐户时,LSA缓存中有时看起来似乎较少或没有门票。 – jalf 2012-01-16 19:13:38