Frage

Ich versuche, einen WCF-Dienst mit Windows-Konten zu sichern. Der Dienst sollte auf vielen Systemen mit unterschiedlichen Sprachen ausgeführt werden. Wie kann ich eine Principal, die sprachunabhängige Rollennamen hat?

Ich fand hässlichen Workarounds wie dieser.

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

Ich glaube nicht, das ist eine gute Lösung, ist es eine Möglichkeit, diese Sprache unabhängig zu machen? Gibt es eine Möglichkeit, das Konto SID anstelle einer Zeichenfolge zu benutzen?

War es hilfreich?

Lösung

Ein weiterer Versuch: Schauen Sie unter http : //msdn.microsoft.com/en-us/library/system.security.principal.windowsbuiltinrole.aspx .... und zur Probe gehen. Dort können Sie die BuiltIn Enumerationsmember verwenden, um die richtig geschrieben Gruppennamen zu erhalten (über die API) ... dann sollte es die Sprache neutral sein.

HTH, Thomas

Andere Tipps

Sie können Ihre eigene Erlaubnis Attribut rollen, die die Übersetzung behandelt:

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

Bitte beachten Sie, dass dies einigen zusätzlichen Installationsaufwand erfordern (GAC, caspol usw.).

Sie können die zwingend notwendig Version verwenden und dynamisch eine sprachneutrale Form (z SID) auf die lokalisierte Form umwandeln (kann durch SecurityIdentifier.Translate sein).

Bekannte SIDs sind aufgelistet in KB 243330.

Hmmmm, ich würde nicht einen Gruppennamen direkt in meinem Code (hart codiert) verwenden. Versuchen Sie, abstrakt es zu einer Rolle wie „HelloWorldAdmin“ und haben eine Rolle in der app.config konfiguriert. Dies sollte man zu einer Benutzergruppe zugeordnet werden. Dies würde es ermöglichen Ihre Benutzer / Administratoren eine Gruppe auswählen und auf die Rolle Karte (zum Beispiel in dem Fall, dass die Anwendung Administratoren sind nicht Sie AD-Admins). Hier finden Sie aktuelle http://msdn.microsoft.com/en-us/ Bibliothek / ms998314.aspx . HTH.

Sind Sie absolut sicher, dass auf einem deutschsprachiges System, der „VORDEFINIERT \ Administratoren“ wird nicht funktionieren? Ich hätte sogar dann, diese grundlegenden Gruppennamen vorstellen sollte gültig sein. Ja, in Ihrem Admin-Tools, wird es „Vordefiniert \ Administratoren“ zeigen - aber ich wäre überrascht, wenn das Attribut Principalsprachabhängig sein würde

.

MArc

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top