2012-10-03 42 views
5

Tengo una aplicación web asp.net que realiza llamadas a varios servicios WCF. La aplicación web se encuentra en www.midominio.com y los servicios están en services.midominio.com. Están alojados desde el mismo servidor.Cómo funciona la autenticación WCF de Windows sin establecer explícitamente las credenciales

He acaba de agregar puntos finales seguras (bassicHttpBindings) para los servicios que utilizan la seguridad de transporte (https) y authenication de Windows:

<binding name="WindowsSecuredBinding"> 
    <security mode="Transport"> 
    <transport clientCredentialType="Windows" /> 
    </security> 
</binding> 

y configurarse la aplicación web cliente para utilizar estos nuevos criterios de valoración seguras. Esperaba que el siguiente paso fuera escribir un código en la aplicación web para configurar las credenciales del cliente a fin de pasar la autenticación de Windows. Para mi sorpresa, las llamadas al servicio están teniendo éxito sin establecer las credenciales del cliente. Supongo que debe estar enviando la cuenta con la que se ejecuta la aplicación web, pero no sé cómo verificarla. En otros escenarios, pensé que había visto las credenciales del cliente sin ningún valor predeterminado implícito.

así que tengo dos preguntas:

  1. Cómo está teniendo éxito la autenticación? ¿Envía al usuario la aplicación que se ejecuta debajo, las credenciales del usuario del navegador, sin credenciales?
  2. ¿Cómo puedo depurar/registrar/rastrear el proceso de autenticación? Me gustaría al menos ver el nombre de usuario que se está autenticando para poder validar la seguridad.
+0

La autenticación de ventana utiliza [Kerberos] (http://support.microsoft.com/kb/217098) IIRC. Creo que usa la Identidad actual, pero no estoy seguro de cómo es configurable o cómo funcionan todos los pequeños detalles. –

Respuesta

3
  1. Con la configuración actual como lo tienes en el lado del servidor y el cliente el cliente envía el creditials que se ejecuta bajo. Debido a que el tipo de credencial se establece en Windows, hace que la negociación de seguridad compruebe en Kerberos si se encuentra en un dominio o en NTLM si se trata de un entorno de grupo de trabajo. (More information can be found here.)
  2. Para depurar el proceso de autenticación WCF tiene una función de auditoría que se puede habilitar. Instructions for adding auditing are here.

He aquí las partes importantes de la auditoría de la página de MSDN:

<behaviors> 
<behavior name="myAuditBehavior"> 
    <serviceSecurityAudit auditLogLocation="Application" 
    suppressAuditFailure="false" 
    serviceAuthorizationAuditLevel="None" 
    messageAuthenticationAuditLevel="SuccessOrFailure" /> 
</behavior> 
</behaviors> 

y añadiendo el comportamiento al servicio:

<service type="[Your service type here]" behaviorConfiguration="myAuditBehavior"> 

Una vez que se habilita la auditoría se puede ver toda la actividad de autorización (éxito y fracaso si lo configuras de esa manera). Esto debería permitirle validar que su seguridad está configurada de la manera que le gustaría.

Si necesita la funcionalidad de pasar las credenciales del usuario que está utilizando la aplicación web ASP.NET (esto se denomina suplantación) la documentación msdn que se encuentra en esta página "Delagation and Impersonation with WCF".

+0

Excelente respuesta. Gracias por tocar la suplantación también. ¿Estoy en lo cierto al pensar que myClientBase.ClientCredentials ya está configurado de manera predeterminada en System.Net.CredentialCache.DefaultNetworkCredentials o DefaultNetworkCredentials es algo más? Tal vez lo descubra por mi cuenta usando la auditoría. – xr280xr

+0

Supongo que está configurado para las credenciales de la identidad del conjunto de aplicaciones en la que se ejecuta su aplicación web (suponiendo que esté alojando en IIS).Es posible si el sitio web ya estaba configurado para la suplantación de que la llamada WCF lo está heredando (pero lo dudo). La auditoría será la única forma de saberlo con certeza, pero supongo que es la identidad del grupo de aplicaciones. –

+0

El sitio de la aplicación web está configurado para permitir el acceso anónimo utilizando la cuenta local IUSR_ *. Está usando esa cuenta para autorización que es diferente de la cuenta del grupo de aplicaciones. – xr280xr

Cuestiones relacionadas