Как программно очистить кеш билетов Kerberos
Кто-нибудь знает, как очистить кеш билетов Kerberos на локальном компьютере - используя управляемый \ unmanaegd код?
Заранее спасибо!
4 ответа
Я считаю, что вам нужно сделать вызов LsaCallAuthenticationPackage с помощью KERB_PURGE_TKT_CACHE_REQUEST после использования LsaConnectUntrusted или LsaRegisterLogonProcess. Извините, никаких подробностей, но у меня нет своего кода для этого...
Самый простой способ - взять исходный код Microsoft KList (входит в платформу SDK\ Samples) и делать то же, что и они...
Существует пример "управляемого C#" очистки билетов Kerberos с помощью pInvoke по адресу https://github.com/ErtiEelmaa/Stackru/blob/master/GroupPolicyUtilities.cs
Слишком долго копировать / вставлять здесь. Это заняло некоторое время, так как структуры в pInvoke были недействительными (например, кто-то, хотя C++ LONG равен C# LONG и yada-yada), однако, я протестировал этот, и он работал для меня.
Также я заметил, что в Windows Server 2003 klist.c есть несколько ошибок в PurgeTicket:
- это не убирает ответ
- он дважды проверяет один и тот же "РЕЗУЛЬТАТ" вместо проверки "РЕЗУЛЬТАТ", а затем "СУБ-РЕЗУЛЬТАТ"
Простой, глупый способ:
system("kdestroy");
Или, если вы хотите быть более законным, просто проверьте источник kdestroy
реализация. krb5_cc_destroy()
кажется, вызов соответствующей функции.