Como lidar com negociar no .NET?

Estou tentando implementar o Negotiate (pelo menos a parte Kerberos) em um pequeno servidor web. Eu descobri como fazer com que um cliente me envie um cabeçalho de Autorização de Negociação Kerberos. Eu descobri como decodificar esses dados (ASN.1). Não consigo descobrir como transformar isso em umWindowsIdentity. Posso ter uma idéia geral de como possoKerberosReceiverSecurityToken, mas não consigo encontrar nada parecido com umNegotiateReceiverSecurityToken. Venho pesquisando muitas DLLs e não consigo descobrir onde o IIS / .NET processa o cabeçalho Negociar.

Eu presumo (se eu tivesse meu próprioSspiWrapper) que eu faria algo comSspiWrapper.AcquireDefaultCredential("Negotiate", CredentialUse.Inbound) para adquirir um contexto SSPI com o qual eu poderia chamarAcceptSecurityContext/Negotiate e depois useQuerySecurityContextToken para obter o token com o qual eu poderia criar umWindowsIdentity.

MasKerberosReceiverSecurityToken faz com que pareça um processo imensamente complicado. E sem ter idéia de como fazer isso ou qual parte da carga útil do cabeçalho da Autorização colocar nela, eu provavelmente poderia bater minha cabeça contra ela por um mês sem chegar a lugar algum.

(Antes de você perguntar ou responder, não tenho absolutamente nenhum interesse em usar a lógica de negociação incorporada. Se pudesse encontrá-la, aprenderia com ela, mas tenho tentado fazer com que isso funcione por muito tempo. acabei com isso.)

questionAnswers(1)

yourAnswerToTheQuestion