当前位置: 首页 > 编程语言 > C#

服务层(.NET应用)的授权和用户信息共享

时间:2023-04-11 03:41:48 C#

服务层(.NET应用)的授权和用户信息-layered),我想知道管理身份验证的最佳方式/BussinessLayer(BL)中的授权+数据过滤。我们将从多个接口(ASP.NET应用程序和Web服务)使用BL,我认为我的ServiceLayer应该可以完成这项工作,但我找不到最好的方法。我认为它可能是这样的:(1)用户可能使用FormsAuthentication(ASP.NETWeb客户端)进行身份验证。(2)ASP.NET代码(Controller/CodeBehind)实例化服务以完成一些用户案例,以某种方式传递“用户”。(3)服务方法检查“用户”是否存在(认证)和他的角色(授权)来验证他是否可以调用该方法。如果未通过身份验证或授权,则会抛出异常。(4)服务使用存储库+其他服务+完成其工作所需的一切。如果需要某种细粒度的过滤(例如,用户仅对某些项目具有权限),该服务会自动应用它。我想要的是将ServiceLayer与“网络内容”隔离(无法访问会话......),但谁知道用户调用其方法来正确执行什么操作。此外,我不知道如何以一种好的方式将这项工作与ASP.NET身份验证相匹配......我正在考虑将“用户”包装在服务构造器中,以便其方法具有所需的“上下文”,可以那个工作?...我会很感激一些指示或现有的代码片段。感谢您的帮助...首先,身份验证和授权是两个独立的事物。你的问题意味着你已经知道这一点,但我只是想说清楚。身份验证应该发生在应用程序边界(例如,Web应用程序中的表单身份验证)。默认方法是身份验证模块在身份验证成功后设置Thread.CurrentPrincipal。通常,IPrincipal是.NET中用户上下文建模的标准基础。例如,HttpContext.User是一个IPrincipal。在您的域模型和数据访问模块中,您可以使用Thread.CurrentPrincipal来实现授权逻辑。这允许您独立更改身份验证和授权。对我来说,我认为如果让客户端层(您的网站/服务)进行身份验证并让BL仅包含业务逻辑,这将是简单且可扩展的。如果您需要在BL中引用当前用户,您可以考虑使用一个接口来“包装”一些用户身份信息,这些信息可以从各个UI层传递。以上就是C#学习教程:服务层授权与用户信息共享(.NET应用程序)的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: