我目前正在 .NET 环境(n 层)中使用企业应用程序,我想知道在我的 BusinessLayer (BL) 中管理身份验证/授权 + 数据过滤的最佳方法。我们将从多个接口(ASP.NET 应用程序和 Web 服务)使用该 BL,我认为我的 ServiceLayer 应该可以完成这项工作,但我只是找不到最佳方法。
我想它可能是这样的:
(1) 用户获得身份验证(ASP.NET Web 客户端),可能使用 FormsAuthentication。
(2) ASP .NET 代码(控制器/代码隐藏)实例化一个服务来完成一些用户案例,以某种方式传递“用户”。
(3) 服务方法检查“用户”是否存在(身份验证)及其角色(授权),以验证他是否可以调用该方法。如果未经过身份验证或授权,则会引发异常。
(4) 服务使用存储库+其他服务+完成工作所需的任何内容。如果需要某种细粒度过滤(例如用户仅对某些项目具有权限),服务会自动应用它。
我想要的是让 ServiceLayer 与“网络内容”隔离(不访问会话...),但谁知道用户调用其方法来正确操作。另外我不知道如何以良好的方式将其与 ASP .NET 身份验证相匹配...
我正在考虑总结服务构造函数中的“用户”,以便其方法具有他们需要的“上下文”,这可以工作吗?...我将不胜感激一些指示或现有的代码片段。
感谢您的帮助...
首先,身份验证和授权是两个独立的事物。你的问题暗示你已经知道这一点,但我只是想明确说明这一点。
身份验证应该在应用程序边界进行(例如 Web 应用程序中的表单身份验证)。
默认方法是身份验证模块设置Thread.CurrentPrincipal认证成功后。
一般来说,知识产权校长是 .NET 中用户上下文建模的标准基础。例如,HttpContext.User是一位知识产权主体。
在域模型和数据访问模块中,您可以使用 Thread.CurrentPrincipal 来实现授权逻辑。这允许您独立地改变身份验证和授权。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)