问题标签 [principalpermission]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2701 浏览

c# - SecurityManager.IsGranted() 行为

任何人都可以解释以下 c# 行为吗?我编写了一个小型控制台应用程序只是为了了解 CAS,但我似乎无法理解为什么以下代码行会像它们那样工作:

两个 SecurityManager.IsGranted() 调用的输出都是“真”。

如果我再添加以下几行:

第一个需求调用通过,但第二个(如预期的那样)导致 SecurityException。

为什么 SecurityManager.IsGranted() 调用不为“roleX”权限返回 false?

0 投票
1 回答
2396 浏览

wcf - WCF 和 PrincipalPermission

我有许多服务将在 NT Authority\System 的安全上下文中作为 Windows 服务运行(这些服务是基于 NetTCP 的)。Active Directory 中存储的六个组将被允许访问这些服务:

用户 代理 审批者 管理员(三级管理员)

我知道我可以使用 ServiceSecurityContext.Current.WindowsIdentity.Name 获取连接到服务的用户。

我需要做的是在业务层中验证传入的用户上下文是否能够访问特定服务,并且我希望它遵循我公司支持的旧应用程序,该应用程序使用 PrincipalPermission 传递它一个角色并使用确保访问的 Demand() 方法。

我想我最初的问题是,如果我将 ServiceSecurityContext 用户名和相关角色(组)传递给 PrincipalPermission,它是否会自动知道在幕后点击 Active Directory,因为该服务是在同一域上的 AD 帐户的上下文中运行的?或者有什么特别的事情我应该做的吗?

0 投票
2 回答
1087 浏览

c# - Active Directory 和 PrincipalPermission

这比寻求帮助更多的是好奇,但我注意到,当使用 PrincipalPermission 并验证用户是 Active Directory 中特定组的一部分时,它不会使用真正的组名,而是针对 Windows 2000 之前的组进行验证取而代之的名字。通常这不会产生影响——除非有人碰巧使这些值不同。

谁能想到.Net API 为什么会使用该组名而不是“真实”名称?这给我带来了数小时的悲痛和一点点运气,最终弄明白了这一切。

0 投票
3 回答
1282 浏览

wcf - Flowing WCF Role-Based Security through to UI

I am looking for some best practices on how to handle the following scenario - flowing permissions from WCF service layer through to UI:

I have WCF services with methods that have been decorated with the PrincipalPermission attribute. I would like a means to allow a client to check if they have the required permissions before invoking the method.

A basic example of this could be checking whether a user can perform a specific function (say submitting an order), which can then be used to enable/disable a button within the UI.

Possible options are to add "chatty" operations like bool CanSubmitOrder() to the service, or instead have a single method OrderServicePermissions GetPermissions() which returns a message with a property CanSubmitOrder? I can then set the enabled state of a "Submit Order" button to the result.

So does anybody know of a better approach, or even a best practice?

Thanks in advance!

0 投票
2 回答
415 浏览

asp.net - System.Security.SecurityException - 获取角色名称

我已经在我的 global.asax 中实现了一个捕获所有安全异常的方法,就像这样......

是否有我可以访问的属性显示用户权限中缺少的角色名称?IE。err.RoleThatFailed?

谢谢,

ETF 费尔法克斯。

0 投票
0 回答
1064 浏览

.net - WCF服务获取的调用者身份(网络服务账号)过期

我们有一个使用 TCP 绑定的 WCF 服务,托管在 Windows 服务中。WCF 服务由 ASP.NET Web 应用程序调用。

当调用 WCF 服务时,我想检查调用身份是否是特定本地组的成员。有几种方法可以做到这一点:

当我们的 ASP.NET Web 应用程序托管在 Windows 2003/IIS6 中时,它在 NETWORK SERVICE 帐户下运行。这意味着必须将 NETWORK SERVICE 添加到本地组,WCF 代码才能正确运行。但是,如果我将帐户添加到组,然后测试我的应用程序(使用上述任何方法来测试组成员身份),代码似乎认为 NETWORK SERVICE 不是该组的成员。

我编写了一个简单的 ASP.NET 页面来执行相同的组成员资格测试。我发现网页只会在我执行iisreset后识别 NETWORK SERVICE 已加入该组。但是,重置 IIS 对我的 WCF 服务没有任何影响。我什至尝试重新启动托管我的 WCF 服务的 Windows 服务,但没有任何区别。只有在我重新启动计算机后,WCF 代码才意识到 NETWORK SERVICE 是该组的成员。

我试图了解为什么我的简单 ASP.NET 页面与我的 WCF 服务的行为会有所不同,特别是当它们使用相同的代码并且它们都报告相同的身份名称(NT AUTHORITY\NETWORK SERVICE)时。有人知道吗?

在 Windows 2008(我的 Web 应用程序也在 NETWORK SERVICE 下运行)或 Windows 2008 R2(它作为应用程序池身份帐户运行)上不会出现此问题。

谢谢你的帮助!

0 投票
2 回答
1895 浏览

c# - 细粒度的权限;PrincipalPermission - 角色与权限分开;

我在 wcf 服务中使用 PrincipalPermission 已经有一段时间了。[PrincipalPermission(SecurityAction.Demand, Role = SecurityRoles.CanManageUsers)]

我们的角色以:Can* 为前缀,这是我们使用内置 asp.net 会员系统实现细粒度操作控制的方式。

这使得作为一个业务部门很难知道我们可以为用户提供哪些细粒度的角色。

这是我的新方法,想看看是否有人可以在我实施我的建议之前提供反馈和代码审查。

1) aspnet_roles - 业务部门角色

2)通过创建权限表和Role_Permission表和User_Permission表来扩展asp.net会员系统(多对多)

3)创建自定义 CodeAccessSecurityAttribute + 来查看新表 [CustomPermissionCheck(Security.Demand, HasPermission="can*")] 第一次迭代我将静态地新建依赖存储库.. 理想情况下,我想要一个注入存储库的 aop 样式属性IPermissionRepository.HasPermission(...);

如果我采用新的 aop 方式,我可能会停止从 CodeAccessSecurityAttribute 继承——安全人员对此有何看法?

有没有其他人解决了这个问题,我错过了框架中有什么东西吗?

0 投票
1 回答
243 浏览

silverlight-4.0 - Silverlight4 页面和 PrincipalPermission

我正在使用 VS2010 来了解具有 MVVM 设计模式的 Silverlight4 业务应用程序。

试图弄清楚如何以声明方式保护 SL4 视图(Page 或 UserControl 或 ChildWindow)。

我记得在 ASP.NET 2.0 Web 应用程序中,我可以将 PrincipalPermission 属性放在我的网页上。

例子:

在“SL4”项目中似乎无法做到这一点,因为它甚至不允许我设置对 System.Security 的引用。

我的谷歌搜索不断返回有关保护 WCF 方法调用的结果,这作为另一层安全性很好;但我也想对 SL 视图本身进行声明性安全性。

有人有什么想法吗?(记住我是 SL 开发的新手)

谢谢谢尔

0 投票
3 回答
4239 浏览

.net - 为什么 System.Environment.MachineName 值大写?

我的机器名称是小写的(我在“高级系统设置”对话框的“计算机名称”选项卡中看到)但System.Environment.MachineName报告它是大写的。这是为什么?这对我来说是一个真正的问题,因为根据我的测试PrincipalPermissionAttribute对角色名称执行区分大小写的比较(我将自定义角色映射到 Windows 组,并且我的环境是非域的)。有什么建议吗?

0 投票
1 回答
2092 浏览

asp.net - 将声明式 PrincipalPermission 转换为程序化 .Demand

我目前有两个这样的角色:

[PrincipalPermission(SecurityAction.Demand, Role="Domain\Admin")] [PrincipalPermission(SecurityAction.Demand, Role="Domain\AnotherRole")]

问题是这个继承的代码是特定于域的,我想最终从 web.config 文件中获取角色,所以我可以在不在域中的 VM 上工作。

我见过这样的例子:

由于如果用户不在角色中这会引发异常,我如何更改此示例以允许两个角色中的任何一个?我可以使用多个 IPrincipal.IsInRole() 然后抛出我自己的异常,但似乎有一种方法可以使用具有多个角色的 .Demand 方法。

更新 12/21:基于以下 Ladislav 回答的 Union 链接的示例代码:

但是 AzMan(由 Ladislav 建议看起来是一个更好但更复杂的解决方案)。