2008-11-15 21 views
20

Estoy muy verde con los servicios web y WCF, y estoy usando la autenticación integrada de Windows. ¿Cómo obtengo el nombre de usuario en la interfaz del servidor? Creo que se supone que debo implementar un Comportamiento personalizado, o tal vez algo con las Sesiones WCF? Cualquier pista sería súper útil.Obtener el nombre de usuario de Windows del lado del servidor WCF

Respuesta

9

Aquí hay un fragmento de código de servicio que muestra cómo se puede recuperar y utilizar la WindowsIdentity asociado con la persona que llama de un servicio WCF.

Este código asume que está aceptando la mayoría de los valores predeterminados de su configuración. Debería funcionar sin problemas con Named Pipe o Net Net binding.

la p.Demand() determinará si el usuario está en el grupo de Windows especificado por la variable permissionGroup.

private static void DemandManagerPermission() 
{ 
    // Verify the use has authority to proceed 
    string permissionGroup = ConfigurationManager.AppSettings["ManagerPermissionGroup"]; 
    if (string.IsNullOrEmpty(permissionGroup)) 
     throw new FaultException("Group permissions not set for access control."); 

    AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 
    var p = new PrincipalPermission(ServiceSecurityContext.Current.WindowsIdentity.Name, permissionGroup, true); 
    p.Demand(); 

} 
+1

La p.Demand exigirá que 'Thread.CurrentPrincipal' tenga la función especificada Y tenga el mismo nombre de usuario que' ServiceSecurityContext.Current .WindowsIdentity.Name'. – Joe

-2

¿Has probado WindowsIdentity.GetCurrent();?

+8

Eso le da a la identidad que se ejecuta el servicio - no la identidad del usuario que llama al servicio – Cocowalla

49

intente buscar en ServiceSecurityContext.Current.WindowsIdentity

5

Para obtener el servicio de llamadas de WCF nombre de usuario:

var = callerUserName ServiceSecurityContext.Current.WindowsIdentity.Name;

Cuestiones relacionadas