n 层架构中的身份验证和授权
Posted
技术标签:
【中文标题】n 层架构中的身份验证和授权【英文标题】:Authentication and authorisation in an n-tiered architecture 【发布时间】:2011-03-17 16:45:11 【问题描述】:我需要能够收紧我的业务层 - 访问特定数据。 UI 可以调用业务层并接收用户详细信息。然后,UI 可以对用户调用 .Save(),业务层将调用数据访问层来保存用户。
虽然,这里的问题是我不只是希望任何用户能够接收用户详细信息并调用保存 - 只有具有“管理员”角色的经过身份验证的用户。我将如何在我的业务层/UI 中进行此身份验证/授权以便实现此目的?
我将 ASP.NET 用于我的 UI,并且我已经阅读了成员资格/角色提供程序,但这似乎只是针对实际 UI。我需要在我的业务层保护它,因为将来可能会有几个不同的 UI。例如windows 窗体和 Asp.net。
感谢您的想法和建议。
谢谢。
【问题讨论】:
您如何在您的层级之间进行通信? WCF、.net 远程处理、Web 服务? 类库参考,但将来可能会改变 【参考方案1】:您可能想要研究的另一种方法(如果在 .NET 3.5 / 4.0 中开发)是使用 Windows Identity Foundation。
如果您有兴趣将您的授权逻辑保留在您的网站之外(如果您希望从多个前端使用您的业务层,我假设您会这样做)我绝对建议您查看 WIF。您还可以使用 ADFS v2.0(这是 Windows Server 2008 R2 中的服务器角色)与 Active Directory 集成。
Patterns & Practices 发布了guide,这对于深入研究该主题非常有用。
【讨论】:
【参考方案2】:ASP.NET 角色/成员资格提供程序包括您可以重复使用的存储和代码级组件 - 它们不仅仅是 UI。
对于细粒度的访问控制(例如页面上的特定功能),您可以使用企业库。您将能够重用代码来保护 BL 层和 UI 层的功能。
你最想要的链接是这个:Determining Whether a User Is Authorized to Perform a Task
另见:
What Does the Security Application Block Do? DotNetJohn - Enterprise Library Security Block... Rule Based Security using Microsoft Enterprise Library and CAS在 EntLibs 的早期版本中,授权管理器是一个关键组件,但在较新的版本中,这不是一个强制要求,您可以使用 AuthorizationRuleProvider
。
见:Developing Applications Using Windows Authorization Manager。
根据数据的复杂性、数据量和性能需求,过滤数据会有点问题。
一种策略是使用一个简单的 DAL 来返回所有内容,并删除当前用户不允许在 BL 中看到的数据。 设计一个对您的应用程序使用的角色有一定了解的 DAL:DAL.GetCustomersForAdmin()
和 DAL.GetCustomersForMember()
但这有点危险,因为你会被绑定到使用这些角色。
拥有一个具有安全意识的数据库/DAL,并且始终只返回允许用户查看的数据,通过相同的方法:DAL.GetCustomers()
【讨论】:
我想这就是我想要的。不过看起来确实很复杂 很多事情从外面看起来很复杂——但一旦你进去了就不会那么糟糕了;一旦你加快了速度,你就可以在任何地方重复使用它 - 第一次可能会很慢,但随后的使用会快得多。 数据很多,理论上第一个策略需要更长的时间来进行数据库传输,正如你所说的第二个策略是我不喜欢的,但是你如何实施第三个策略,唯一的事情是有一个所有用户设置的数据库吗?第四种策略怎么样,BL 知道用户访问,并使用 DAL 仅获取用户有权访问的数据。第一种策略和第二种策略之间的变化?以上是关于n 层架构中的身份验证和授权的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Azure API 管理设计微服务架构中的身份验证和授权策略?