在n层架构中进行身份验证和授权

时间:2010-07-18 23:09:48

标签: c# authentication architecture authorization business-logic-layer

我需要能够收紧业务层 - 访问特定数据。 UI可以调用业务层并接收用户详细信息。然后,用户界面可以在用户上调用.Save(),业务层将调用数据访问层来保存用户。

虽然,这里的问题是我不仅希望任何用户能够接收用户详细信息并且只使用“admin”角色调用save-only authenticated用户。我如何在业务层/ UI中进行此身份验证/授权,以便实现此目标?

我正在使用ASP.NET作为我的UI,并且我已经读入了成员资格/角色提供程序,但这似乎只适用于实际的UI。我需要在我的业务层保护它,因为将来可能会有几个不同的UI。例如Windows窗体和Asp.net。

赞赏我们的想法和建议。

感谢。

2 个答案:

答案 0 :(得分:1)

您可能想要研究的另一种方法(如果在.NET 3.5 / 4.0中开发)正在使用Windows Identity Foundation

如果您有兴趣将您的授权逻辑保留在您的网站之外(我认为如果您希望从1个以上的前端使用您的业务层,那么我肯定会建议您看看WIF)。您还可以使用ADFS v2.0(Windows Server 2008 R2中的服务器角色)与Active Directory集成。

模式&实践已经发布了guide,这对于深入研究这一主题非常有用。

答案 1 :(得分:0)

ASP.NET角色/成员资格提供程序包括可以重用的存储和代码级别组件 - 它们不仅仅是UI。

对于细粒度的访问控制(例如,页面上的特定功能),您可以使用企业库。您将能够重用代码来保护BL层和UI层的功能。

您最想要的链接是:Determining Whether a User Is Authorized to Perform a Task

另见:

在早期版本的EntLibs中,授权管理器是一个关键组件,但在更新的版本中,它不是一个确定的要求,而是可以使用AuthorizationRuleProvider。 见:Developing Applications Using Windows Authorization Manager

根据数据的复杂性,数据量和性能需求,过滤数据会有一些问题。

  • 一种策略是使用一个简单的DAL返回所有内容,并删除当前用户不允许在BL中看到的数据。
  • 设计一个DAL,其中包含您的应用程序使用的角色的一些知识: DAL.GetCustomersForAdmin()DAL.GetCustomersForMember()但这有点危险,因为你将被绑定使用这些角色。
  • 拥有可识别安全性的数据库/ DAL,并始终通过相同的方法仅返回允许用户查看的数据:DAL.GetCustomers()
相关问题