net mvc asp application active c# asp.net authentication windows-authentication asp.net-web-api

c# - mvc - Cómo pasar la credencial de Autenticación de Windows del cliente al servicio Web API



windows authentication c# web application (2)

Si usa la suplantación en su sitio web y la API se ejecuta en el mismo servidor, debería funcionar.

http://msdn.microsoft.com/en-us/library/aa292118(v=vs.71).aspx

Sin embargo, si mueve la API a un servidor diferente del sitio, dejará de funcionar. Una configuración de dos servidores requiere la delegación de Kerberos.

Esta es mi primera pregunta, así que me disculpo si reproduzco el protocolo en algún momento.

Dentro de mi entorno corporativo, tengo IIS7.5 alojando un servicio de API web y un sitio web separado que hace llamadas a ese servicio a través de la biblioteca RestSharp. Ambos están configurados actualmente con Autenticación de Windows.

Si navego a cualquiera de ellos con un navegador, me piden que ingrese mi credencial de Windows, y todo funciona bien ... Obtengo las páginas web que quiero y el servicio REST escupe mis datos. La parte que me cuesta entender es cómo usar una sola credencial para la autenticación de ambos. No puedo encontrar la manera de pasar la credencial del sitio web al servicio (intenté suplantar pero no funcionó), o solicitarle al usuario el nombre de usuario / contraseña y luego autenticarlos con "Windows".

Ayuda a un novato a salir?


Después de pasar mis dos días en esto, he encontrado la solución.

Configuración para la API web Habilite la Autenticación de Windows en su API web.

Configuración para la aplicación web Habilite la autenticación de Windows en su aplicación web. Agregar <identity impersonate="true" /> system.web of web.config. Añadir

<system.webServer> <validation validateIntegratedModeConfiguration="false" /> </system.webServer>

en web.config

Habilite la autenticación de Windows y la suplantación de ASP.NET desde IIS.

El usuario sigue el código para publicar datos en la API web (y de manera similar para obtener)

using (var client = new WebClient { UseDefaultCredentials = true }) { client.Headers.Add(HttpRequestHeader.ContentType, "application/xml; charset=utf-8"); byte[] responseArray = client.UploadData("URL of web API", "POST", Encoding.UTF8.GetBytes(XMLText)); string response = Encoding.ASCII.GetString(responseArray); }

NOTA: Lo más importante es llamar siempre a su API web a través de IP. Si utiliza URL, siempre puede obtener 401 Error no autorizado.