Comprender la Autenticación de Windows WCF

Tengo un servicio con autenticación de Windows. Usando el siguiente código, puedo obtener la identidad de Windows del usuario que (usando el cliente) consume el servicio.

String currentUser = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name; 

La configuración en el servidor es:

      

También leí eso en el servidor, está usando Kerberos para que esto funcione.

Ahora, estoy tratando de comprender su significado en nuestra red corporativa. En la oficina, los usuarios iniciarán sesión en sus escritorios utilizando sus credenciales de directorio activo. Nuestro servicio está alojado en un servidor de Windows llamado “SERV1”.

  1. ¿Solo los usuarios que tienen acceso (para iniciar sesión) a “SERV1” pueden acceder al servicio? ¿O todos los usuarios que pueden iniciar sesión en la red de la oficina (demandando las credenciales del directorio activo) podrán consumir el servicio?

  2. ¿Hay alguna forma de garantizar que solo las aplicaciones aprobadas por el CIO accedan al servicio, manteniendo el servicio como ventanas autenticadas?

  3. ¿Esta verificación de autenticación se realiza para cada llamada de operación de servicio o solo para la primera llamada?

  4. ¿Hay alguna forma de que el servicio pueda conocer las credenciales de Windows del usuario?

Nota: Lo que entiendo es que WindowsAuthentication se puede comparar con un proveedor de Membresía, proporcionando nombre de usuario y contraseña desde una ubicación centralizada. Se puede comparar con el proveedor de membresía ASP.Net o el proveedor de membresía de Active Directory.

Otras lecturas:

  1. Proveedor de membresía de ASP.NET Active Directory y proveedor de perfiles de SQL

  2. wcf data contracts authorization authorization

  3. http://www.theserverside.net/tt/articles/showarticle.tss?id=ClaimsBasedSecurityModel

¿Solo pueden acceder al servicio los usuarios que tienen acceso (para iniciar sesión) a “SERV1”?

Sí, ese es el punto de usar las credenciales de Windows en un servicio WCF. Solo los usuarios que tengan una cuenta de dominio en ese dominio de Active Directory (o un dominio separado que tenga una relación bidireccional de plena confianza con su dominio) podrán acceder al servicio.

¿O todos los usuarios que pueden iniciar sesión en la red de la oficina (demandando las credenciales del directorio activo) podrán consumir el servicio?

El límite de seguridad WCF es el dominio de Active Directory , no un servidor en particular.

¿Hay alguna forma de garantizar que solo las aplicaciones aprobadas por el CIO accedan al servicio, manteniendo el servicio como ventanas autenticadas?

¿En qué se diferencian esas aplicaciones “aprobadas por CIO” de otras? Las cuentas acceden a WCF, normalmente cuentas de usuario. Puede limitar qué cuentas tienen acceso a su servicio (por ejemplo, requiriendo que esas cuentas sean miembros de un determinado grupo de AD o algo así). Realmente no se puede “limitar” en función de las aplicaciones (solo si esas aplicaciones usan cuentas específicas a nivel de aplicación para acceder a su servicio WCF)

¿Esta verificación de autenticación se realiza para cada llamada de operación de servicio o solo para la primera llamada?

Depende de su servicio: si utiliza un servicio WCF por llamada , entonces el control se realiza para cada llamada. Si usa un servicio WCF por sesión con la “negociación de seguridad” activada, la comprobación se realiza una vez al comienzo de la sesión y ya no se produce hasta que finaliza la sesión.

¿Hay alguna forma de que el servicio pueda conocer las credenciales de Windows del usuario?

Sí – OperationContext.Current.ServiceSecurityContext.WindowsIdentity ES las credenciales de Windows (la identidad de Windows) utilizadas para llamar a su servicio. Es mucho más que solo el nombre de usuario …..

  1. Esa no es una tarea de autenticación , es una tarea de autorización . Kerberos es responsable de garantizar que el usuario esté autenticado (el nombre que recibe para ellos es su nombre real). LDAP gestiona la autorización. En un contexto de Windows, eso significa que el usuario debe ser miembro de algún grupo de cosas permitidas para acceder al servidor (y el servicio debe verificar que este sea el caso).

  2. Aplicaciones? Realmente no. Es decir, hay dos tipos de principios autenticados en Active Directory: usuarios y computadoras. Pero, ¿por qué importa qué aplicación se está ejecutando, si el usuario que ejecuta el progtwig tiene permiso para conectarse al servicio? Dicho de otra manera, no puedes evitar que alguien use su propio código para hacer exactamente lo que haría tu código.

  3. No debería importar La autenticación está funcionando, ¿no? Lo que está sucediendo realmente es que a la aplicación se le pasa un ticket para probar que el usuario ya se ha autenticado (en el KDC, el servidor de directorio activo).

  4. Sí, el contexto de seguridad es , en cierto sentido, el conjunto de credenciales del usuario. También pueden tener otras credenciales, pero también puedes obtenerlas.