Как программно очистить кеш билетов 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() кажется, вызов соответствующей функции.

Другие вопросы по тегам