Pregunta

Estoy tratando de asegurar un servicio WCF usando cuentas de Windows. El servicio debe ejecutarse en muchos sistemas con diferentes idiomas. ¿Cómo puedo configurar un Permiso principal que tenga nombres de roles independientes del idioma?

Encontré soluciones feas como esta.

[PrincipalPermission(SecurityAction.Demand, Role = "Builtin\\Administrators")] // English
[PrincipalPermission(SecurityAction.Demand, Role = "Vordefiniert\\Administratoren")] // German
public string HelloWorld()
{
    return "Hello";
}

No creo que esta sea una buena solución, ¿hay alguna forma de hacer que este lenguaje sea independiente? ¿Hay alguna forma de usar el SID de la cuenta en lugar de una cadena?

¿Fue útil?

Solución

Un intento más: eche un vistazo a http : //msdn.microsoft.com/en-us/library/system.security.principal.windowsbuiltinrole.aspx .... y vaya a la muestra. Allí puede usar los miembros de la enumeración BuiltIn para obtener el nombre del grupo correctamente escrito (a través de la API) ... entonces debería ser neutral con respecto al idioma.

HTH, Thomas

Otros consejos

Podrías tirar tu propio atributo de permiso que maneja la traducción:

 [Serializable, AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true, Inherited = false), ComVisible(true)] 
 public sealed class AdministratorPrincipalPermissionAttribute : CodeAccessSecurityAttribute 
 {  
    public AdministratorPrincipalPermissionAttribute(SecurityAction action) : base(action)
    { }

    public override IPermission CreatePermission()
    {
       var identifier = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
       var role = identifier.Translate(typeof(NTAccount)).Value;
       return new PrincipalPermission(null, role);
    }
 }

Tenga en cuenta que esto requeriría un esfuerzo adicional de implementación (gac, caspol, etc.).

Puede usar la versión imperativa y convertir dinámicamente una forma neutral de idioma (por ejemplo, SID) a la forma localizada (puede ser a través de SecurityIdentifier.Translate).

Los SID conocidos se enumeran en KB 243330.

Hmmmm, no usaría un nombre de grupo directamente en mi código (codificado). Intente abstraerlo a un rol como " HelloWorldAdmin " y tiene un rol configurado en el app.config. Este debe ser asignado a un grupo de usuarios. Esto permitiría a sus usuarios / administradores seleccionar un grupo y asignarlo a la función (por ejemplo, en caso de que los administradores de la aplicación no sean usted los administradores de AD). Eche un vistazo a http://msdn.microsoft.com/en-us/ library / ms998314.aspx . HTH.

¿Está absolutamente seguro de que, en un sistema de idioma alemán, " BUILTIN \ Administrators " ¿no trabajará? Habría imaginado incluso entonces, estos nombres básicos de grupo deberían ser válidos Sí, en sus herramientas de administración, se mostrará " Vordefiniert \ ADministratoren " - pero me sorprendería si el atributo PrincipalPermission fuera dependiente del idioma.

MArc

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top