c# - 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。
编辑:
让我更简化一下:
- 新的 WPF 应用程序(.NET 4.6.1、VS2017、Windows7)
一键连按:
private void foo_Click(object sender, RoutedEventArgs e) { Test(); } public bool Test() { try { var userName = WindowsIdentity.GetCurrent().Name; var group = GetGroups(userName).FirstOrDefault(); var p = new PrincipalPermission(userName, group); p.Demand(); } catch (SecurityException) { throw; } return true; } private static String[] GetGroups(string userName) { var toReturn = new List<String>(); using (var ctx = new PrincipalContext(ContextType.Domain)) using (var user = UserPrincipal.FindByIdentity(ctx, userName)) { if (user != null) { var output = user.GetGroups().Select(x => x.SamAccountName).ToArray(); foreach (var group in output) toReturn.Add(group); } } return toReturn.ToArray(); }
为什么?
解决方案
据我所知,如果你想将一个方法限制为一个名为的组GroupA
,你可以使用
[PrincipalPermission(SecurityAction.Demand, Role = "GroupA")]
注意使用PrincipalPermission.Role
代替PrincipalPermission.Name
。你有一个群叫username
吗?我认为不是,这可能是问题所在。我不确定您是否可以将方法限制为单个用户名,我只知道限制用户组。
我知道的唯一用途PrincipalPermission.Name
是如果您使用证书,例如
[PrincipalPermission(SecurityAction.Demand, Name = "CN=<SubjectName>; <Certificate Thumbprint>")]
推荐阅读
- python-3.x - 如何在python3中使用AST递归简化数学表达式?
- javafx - JavaFX MediaPlayer 不播放某些特定 mp4 文件的音频
- compiler-construction - 具有两种不同解析树的明确语法
- node.js - 你如何检查一个数组是否有一些整数,然后把它们加起来得到一个结果
- django - 使用 Django 和 Bootstrap 上传文件不起作用
- python - 在 Heroku 上部署 Flask 应用程序时出现 H10 错误
- android - 如何切换流使用动画赢得 ExoPlayer
- excel - Excel PowerQuery 不导入新列
- node.js - Puppeteer 无法在本地启动浏览器
- amazon-web-services - 使用 Databricks Mount 时的 AWS 关键问题