我正在使用使用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