質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top