try net httpresponseexception handling exceptions error catch asp c# .net active-directory kerberos sspi

c# - net - web api return error to client



¿Cómo manejo Negotiate en.NET? (1)

  1. Analizar el token de respuesta entrante
  2. Llame a Secur32.AcquireCredentialsHandle para obtener un control
  3. Llame a Secur32.AcceptSecurityContext pasando el identificador y el token
  4. Llamar a Secur32.QuerySecurityContextToken pasando el contexto de seguridad
  5. Construya una new WindowsIdentity(hToken) usando el paso de salida 4

Si tiene alguna pregunta sobre cualquiera de estos pasos, puedo elaborar y / o proporcionar algún código de muestra.

Estoy tratando de implementar Negociar (al menos la parte de Kerberos) en un pequeño servidor web. He descubierto cómo hacer para que un cliente me envíe un encabezado de autorización de negociación de Kerberos. He descubierto cómo decodificar esos datos (ASN.1). No puedo entender cómo convertir esto en una WindowsIdentity . Puedo obtener una idea general de cómo podría hacerlo desde KerberosReceiverSecurityToken , pero no puedo encontrar nada como NegotiateReceiverSecurityToken . He estado indagando sobre muchos archivos DLL y no puedo determinar por qué IIS / .NET procesa el encabezado Negociar.

Supongo (si tuviera mi propio SspiWrapper ) que haría algo con SspiWrapper.AcquireDefaultCredential("Negotiate", CredentialUse.Inbound) para adquirir un contexto SSPI con el que podría llamar a AcceptSecurityContext/Negotiate y luego usar QuerySecurityContextToken para obtener el token con que podría crear una WindowsIdentity .

Pero KerberosReceiverSecurityToken hace que parezca un proceso inmensamente complicado. Y sin ninguna idea de cómo hacer eso o qué parte de la carga útil del encabezado de autorización poner en él, probablemente podría vencerme por un mes sin llegar a ningún lado.

(Antes de preguntar o responder, no tengo absolutamente ningún interés en usar la lógica de Negociación incorporada. Si pudiera encontrarla, aprendería de ella, pero he intentado que eso funcione para LEJOS mucho tiempo. Ya terminé con eso.)