Wie ein mehrsprachiger Principalrollennamen setzen?
-
03-07-2019 - |
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?
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