我正在尝试使用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/库/ ms998314.aspx 。 HTH。

您是否完全相信在德语系统中,“BUILTIN \ Administrators”不管用?我甚至会想到,这些基本的组名应该是有效的。是的,在您的管理工具中,它会显示“Vordefiniert \ ADministratoren”。 - 但如果PrincipalPermission属性依赖于语言,我会感到惊讶。

MARC

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top