我正在尝试使用windows帐户保护WCF服务。该服务应该运行在使用不同语言的多个系统上。如何设置具有独立于语言的角色名称的PrincipalPermission?
我发现了像这样的丑陋的变通方法。
[PrincipalPermission(SecurityAction.Demand, Role = "Builtin\\Administrators")] // English
[PrincipalPermission(SecurityAction.Demand, Role = "Vordefiniert\\Administratoren")] // German
public string HelloWorld()
{
return "Hello";
}我认为这不是一个好的解决方案,有没有办法让这种语言独立呢?有没有办法使用帐户SID而不是字符串?
发布于 2009-05-08 11:26:44
再试一次:看看http://msdn.microsoft.com/en-us/library/system.security.principal.windowsbuiltinrole.aspx……然后转到样本。在那里,您可以使用BuiltIn枚举成员来获得拼写正确的组名(通过API)……那么它应该是语言中立的。
HTH,托马斯
发布于 2009-05-09 13:29:15
您可以使用自己的权限属性来处理翻译:
[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等)。
发布于 2009-05-08 18:40:47
您可以使用命令式版本并动态地将语言中立形式(例如SID)转换为本地化形式(可能是通过SecurityIdentifier.Translate)。
KB 243330中列出了众所周知的SID。
https://stackoverflow.com/questions/820289
复制相似问题