Pergunta

Eu estou tentando garantir um serviço WCF usando contas do Windows. O serviço deve ser executado em vários sistemas com diferentes idiomas. Como posso definir um PrincipalPermission que tem linguagem nomes de função independente?

Eu encontrei soluções feias como este.

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

Eu não acho que isso é uma boa solução, há alguma maneira de fazer este independente idioma? Existe uma maneira de usar o SID da conta em vez de uma string?

Foi útil?

Solução

Mais uma tentativa: Tenha uma olhada http : //msdn.microsoft.com/en-us/library/system.security.principal.windowsbuiltinrole.aspx .... e ir para a amostra. Lá você pode usar os membros de enumeração BuiltIn para obter o nome do grupo escrito corretamente (via API) ... então deve ser uma linguagem neutra.

HTH, Thomas

Outras dicas

Você pode rolar o seu próprio atributo permissão que lida com a tradução:

 [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);
    }
 }

Por favor note que isso exigiria algum esforço implantação adicional (GAC, caspol etc.).

Você pode usar a versão imperativo e dinamicamente converter uma forma neutra linguagem (por exemplo SID) para a forma localizada (pode ser através SecurityIdentifier.Translate).

SIDs bem conhecidos estão listados no KB 243330.

Hmmmm, eu não iria usar um nome de grupo diretamente no meu código (codificado). Tente abstrair-lo para um papel como "HelloWorldAdmin" e têm um papel configurado no app.config. Este deve ser mapeado para um grupo de utilizadores. Isso permitiria que os usuários / administradores para selecionar um grupo e mapeá-lo para o papel (por exemplo, no caso de que os administradores de aplicação não está AD admins). Ter um olhar para http://msdn.microsoft.com/en-us/ biblioteca / ms998314.aspx . HTH.

Você tem certeza absoluta de que em um sistema de língua alemã, o "BUILTIN \ Administradores" não vai funcionar? Eu teria imaginado, mesmo assim, esses nomes básicos do grupo devem ser válidos. Sim, em suas ferramentas de administração, ele irá mostrar "Vordefiniert \ ADministratoren" - mas eu ficaria surpreso se o atributo PrincipalPermission seria dependente de idioma

.

MArc

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top