繁体   English   中英

有没有办法可以根据我的asp.net Web应用程序中的活动目录组提供权限?

[英]Is there a way i can give permissions based on the groups of active directory in my asp.net web application?

我想要实现以下目标:

  1. 针对Active Directory验证用户。
  2. 如果用户属于组“A”,我想限制用户权限
  3. 如果用户属于组“B”,我想在我的代码中有一些其他逻辑。

我能够实现上面列表中的第一个。

我在我的Web应用程序(Intranet)中使用表单身份验证。我做了一些研究,并且有各种建议使用我完全不知道的Microsoft Active Directory应用程序模式(ADAM)。有没有办法可以实现上述功能而不使用亚当? 假设将组列表放入代码中并基于此可以在用户属于某个组时进行调用等等。

是我只在集体层面上思考,这限制了我的选择吗? 或者除了从组级别提供用户访问权限还是我完全不了解Active Directory身份验证的概念之外,还有其他方法吗?

检查这个问题,虽然描述不同,但问题是同一个: 验证Active Directory的用户名和密码?

无论哪种方式,ActiveDirectory都在C#中得到完全支持,不需要额外的系统(我也不知道ADAM是什么)。

要检查用户名的组,请使用以下代码:

UserPrincipal p = UserPrincipal.FindByIdentity(
domainContext, IdentityType.SamAccountName, userName);
var groups = p.GetGroups();
foreach (GroupPrincipal g in groups) { /* do something */ }

如果您询问一般架构或最佳实践问题,我建议您查看基于声明的身份验证。 特别是Active Directory联合身份验证服务 (ADFS)。

基本上,您似乎需要控制用户可以在更细粒度级别执行的操作,而不仅仅基于组。 集团成员资格有时可能非常广泛。 例如,并非“用户”中的每个人都拥有相同的权利,而不是“销售”中的每个人都具有相同的访问权限。 但是,你不想创建诸如“销售 - 经理”,“销售 - 员工”,“销售 - 管理人员”等组织。这很快变得难以处理。 无论你花多少时间设计完美的群体分布,在几年内它都会改变,因为销售经理的某些子集将被允许做某事,而其他销售经理则无法做到。

为了解决此问题,使用基于声明的身份验证。 您只需在代码中检查用户是否具有某个“声明”,而不是在组成员资格级别指定权限。 您可以坚持不懈地创建对您的应用程序有意义的声明。 您可以声称“可以更改出生日期”,“可以授权超过1000美元的付款”等。

声明仅附加到您的用户身份,可通过线程的当前原则获得。

现在,用户如何分配这些“索赔”? 好吧,如果你使用ADFS,无论如何你想要。 显然,您可以根据AD组成员身份执行此操作。 您可以基于数据库查找来完成。 如果您愿意,可以在一天或一年中的某个时间进行。

关键是,现在您的索赔发布和索赔执行完全独立,可以独立更改而不会相互影响。 你的代码只是说“嘿,这个家伙有一个声称让他支付超过1000美元,所以我会让他这样做。为什么他有这个说法,我不知道或不关心”。 然后,您的ADFS可以根据其认为合适的任何条件发出声明。 例如,“如果用户是Managers组的成员,或者在安全数据库的SuperUsers表中有一个条目,或者被命名为'Tim Timsky',那么他可以花费超过1000美元”

因此,要回答关于“只考虑限制我的选择的群体级别”的问题,它肯定不必。 如果您要开始一个新的绿色字段项目,ADFS等新工具将为您提供更多选项。

但当然它带有一个警告,即所有抽象都会增加复杂性。 这是您在系统中引入的另一部分。 您可以解耦应用程序并引入更高层次的抽象和功能。 但是,该层是否值得引入取决于您计划如何使用该应用程序。 如果您认为应用程序永远不必区分“管理器”和“用户”,那么基于声明的身份验证就是过度杀戮。 但是如果您觉得随着时间的推移,您的应用程序中将有不同的功能,需要根据模糊和不断变化的规则分配给不同的用户,然后基于声明的身份验证将使您的解决方案更加整洁。

与往常一样,解耦两个部分的净优势取决于一个人独立于另一个人的变化频率。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM