多言語のPrincipalPermissionロール名を設定する方法は?
-
03-07-2019 - |
質問
Windowsアカウントを使用してWCFサービスを保護しようとしています。サービスは、異なる言語の多くのシステムで実行する必要があります。言語に依存しないロール名を持つPrincipalPermissionを設定するにはどうすればよいですか?
このようない回避策が見つかりました。
[PrincipalPermission(SecurityAction.Demand, Role = "Builtin\\Administrators")] // English
[PrincipalPermission(SecurityAction.Demand, Role = "Vordefiniert\\Administratoren")] // German
public string HelloWorld()
{
return "Hello";
}
これは良い解決策ではないと思いますが、この言語を独立させる方法はありますか?文字列の代わりにアカウントSIDを使用する方法はありますか?
解決
もう一度試してください: httpをご覧ください://msdn.microsoft.com/en-us/library/system.security.principal.windowsbuiltinrole.aspx ....そしてサンプルに移動します。そこで、BuiltIn列挙メンバーを使用して、正しいスペルのグループ名を(APIを介して)取得することができます。その後、言語に依存しないはずです。
HTH、 トーマス
他のヒント
翻訳を処理する独自の許可属性をロールできます:
[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);
}
}
これには、追加の展開作業が必要になることに注意してください(gac、caspolなど)。
命令型バージョンを使用し、言語に依存しない形式(SIDなど)をローカライズされた形式(SecurityIdentifier.Translateを使用する場合があります)に動的に変換できます。
既知のSIDはKB 243330にリストされています。
うーん、コードでグループ名を直接使用することはありません(ハードコードされています)。 「HelloWorldAdmin」のような役割に抽象化してみてください。そしてapp.configで設定されたロールを持っています。これは、ユーザーグループにマップする必要があります。これにより、ユーザー/管理者はグループを選択し、それをロールにマッピングできます(たとえば、アプリケーション管理者がAD管理者ではない場合)。 http://msdn.microsoft.com/en-us/をご覧ください。 library / ms998314.aspx 。 HTH。
ドイツ語のシステムでは、" BUILTIN \ Administrators"動作しないでしょう?その場合でも、これらの基本的なグループ名は有効であるはずです。はい。管理ツールでは、「Vordefiniert \ ADministratoren」と表示されます。 -しかし、PrincipalPermission属性が言語に依存する場合、私は驚くでしょう。
MArc