首页 > 解决方案 > PrincipalPermission 总是失败

问题描述

我真的很困惑,应该将什么作为User属性传递给PrincipalPermission装饰器。我刚刚在 .NET 4.6.1 中创建了全新的 WPF 应用程序(但我也尝试了 4.5.2 和 4.0),我放置了一个带有点击事件的按钮:

[PrincipalPermission(SecurityAction.Demand, Name = "MYDOMAIN\\myusername")]
private void foo_Click(object sender, RoutedEventArgs e)
{
    var user = WindowsIdentity.GetCurrent().Name; // this returns: MYDOMAIN\\myusername
}

我收到Request for principal permission failed。为什么??

我也试过:

[PrincipalPermission(SecurityAction.Demand, Name = "myusername")]
[PrincipalPermission(SecurityAction.Demand, Name = "sysadmin")]
[PrincipalPermission(SecurityAction.Demand, Role = "DEVELOPERS")]
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]

我什至尝试过: [PrincipalPermission(SecurityAction.Demand, Authenticated = true)]

它只是不起作用..我做错了什么?如果这很重要,我有 VS2015。

编辑:

让我更简化一下:

为什么?

标签: c#.netsecurityauthorization

解决方案


据我所知,如果你想将一个方法限制为一个名为的GroupA,你可以使用

[PrincipalPermission(SecurityAction.Demand, Role = "GroupA")]

注意使用PrincipalPermission.Role代替PrincipalPermission.Name。你有一个username吗?我认为不是,这可能是问题所在。我不确定您是否可以将方法限制为单个用户名,我只知道限制用户组。


我知道的唯一用途PrincipalPermission.Name是如果您使用证书,例如

[PrincipalPermission(SecurityAction.Demand, Name = "CN=<SubjectName>; <Certificate Thumbprint>")]

推荐阅读