Question

J'essaie de sécuriser un service WCF à l'aide de comptes Windows. Le service doit fonctionner sur de nombreux systèmes avec des langues différentes. Comment définir une PrincipalPermission ayant des noms de rôle indépendants de la langue?

J'ai trouvé de mauvaises solutions de contournement comme celle-ci.

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

Je ne pense pas que ce soit une bonne solution. Existe-t-il un moyen de rendre ce langage indépendant? Existe-t-il un moyen d’utiliser le compte SID au lieu d’une chaîne?

Était-ce utile?

La solution

Une autre tentative: consultez http : //msdn.microsoft.com/en-us/library/system.security.principal.windowsbuiltinrole.aspx ... et allez à l'exemple. Là, vous pouvez utiliser les membres de l'énumération BuiltIn pour obtenir le nom du groupe correctement orthographié (via l'API) ... alors il devrait être indépendant du langage.

HTH, Thomas

Autres conseils

Vous pouvez créer votre propre attribut d'autorisation qui gère la traduction:

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

Veuillez noter que cela nécessiterait des efforts de déploiement supplémentaires (gac, caspol, etc.).

Vous pouvez utiliser la version impérative et convertir de manière dynamique un formulaire neutre en langage (par exemple, SID) en un formulaire localisé (éventuellement via SecurityIdentifier.Translate).

Les SID connus sont répertoriés dans la base de connaissances 243330.

Hmmmm, je n’utiliserais pas un nom de groupe directement dans mon code (codé en dur). Essayez de le résumer à un rôle tel que "HelloWorldAdmin". et avoir un rôle configuré dans le fichier app.config. Celui-ci devrait être mappé à un groupe d'utilisateurs. Cela permettrait à vos utilisateurs / administrateurs de sélectionner un groupe et de le mapper sur le rôle (par exemple, dans le cas où les administrateurs de l'application ne sont pas vous administrateurs AD). Consultez http://msdn.microsoft.com/en-us/ bibliothèque / ms998314.aspx . HTH.

Êtes-vous absolument sûr que, sur un système de langue allemande, le fichier "BUILTIN \ Administrators" ne fonctionnera pas? J'aurais imaginé même alors que ces noms de groupe de base devraient être valides. Oui, dans vos outils d’administration, le message " Vordefiniert \ ADministratoren " - mais je serais surpris que l'attribut PrincipalPermission dépende de la langue.

MARC

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top