Как мне справиться с переговорами в .NET?

Я пытаюсь реализовать Negotiate (по крайней мере, часть Kerberos) на небольшом веб-сервере. Я выяснил, как заставить клиента отправлять мне заголовок Kerberos Negotiate Authorization. Я понял, как декодировать эти данные (ASN.1). Я не могу понять, как превратить это вWindowsIdentity, Я могу получить общее представление о том, как я мог бы изKerberosReceiverSecurityToken, но я не могу найти ничего подобногоNegotiateReceiverSecurityToken, Я копался во многих библиотеках DLL и не могу до конца понять, где IIS / .NET обрабатывает заголовок Negotiate.

Я предполагаю (если бы у меня был свойSspiWrapper) что я бы сделал что-то сSspiWrapper.AcquireDefaultCredential("Negotiate", CredentialUse.Inbound) получить контекст SSPI, с которым я мог бы позвонитьAcceptSecurityContext/Negotiate а затем использоватьQuerySecurityContextToken чтобы получить маркер, с помощью которого я мог бы создатьWindowsIdentity.

НоKerberosReceiverSecurityToken делает это выглядит очень сложным процессом. И без какой-либо идеи о том, как это сделать или какую часть полезной нагрузки заголовка авторизации вставить в нее, я, вероятно, мог бы биться с ней в течение месяца, не доходя никуда.

(Прежде чем вы спросите или ответите, я абсолютно не заинтересован в использовании встроенной логики переговоров. Если бы я мог ее найти, я бы извлек уроки из нее, но я пытался заставить это работать на FAR надолго. И я с этим покончено.)

Ответы на вопрос(1)

Ваш ответ на вопрос