服务层中的授权和用户信息(.NET 应用程序)

2023-11-27

我目前正在 .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(使用前将#替换为@)

服务层中的授权和用户信息(.NET 应用程序) 的相关文章

随机推荐

  • 我可以将视图分页器与视图(而不是片段)一起使用吗

    我在用ViewPager用于在之间滑动Fragments 但是我可以使用ViewPager在之间滑动Views简单的 XML 布局 这是我的页面Adapter对于用于在 Fragment 之间滑动的 ViewPager import jav
  • 以编程方式读取应用程序的 logcat

    我读了本文已经 但它显示的大部分文本似乎不在我的应用程序中 如何过滤消息并让它仅显示我的应用程序的日志 换句话说 我想像 Android Studio 中的那样显示它 仅显示我的应用程序的错误日志 显示时间戳等 我尝试了类似 logcat
  • “RefVariable”对象没有属性“_id”

    我正在尝试训练线性回归模型来预测金县的房价 我是按照教程一步步操作的 然而 当我最小化损失函数时 我收到错误 RefVariable object has no attribute id 我正在遵循一个简单的教程来学习如何训练简单的线性回归
  • ubuntu下安卓模拟器没有声音

    我正在 ubuntu 19 10 中运行 android 模拟器 我尝试了以下解决方案 但没有结果 Link 1 Link 2 Link 3 Error 1 10 PM Emulator pulseaudio pa context conn
  • 像在 Java 中一样在 Swift 中使用套接字

    如果我想连接到服务器 在 Java 中我会打开一个 Socket 并使用端口和主机地址对其进行初始化 然后检索输入 输出流并读 写我想要的任何内容 在 Swift 中 我很难这样做 因为它不是那样构建的 我真的很想看到一个简单的示例 说明如
  • dlopen 失败:无法打开共享对象文件:没有这样的文件或目录

    问题是我使用dlopen加载一个库 so是我写的 它不是系统库 但我得到了标题中所示的错误 我已经包括了dlfcn h 在编译器中 我使用了 ldl command 我想要加载的只是源代码文件夹 我尝试添加 L 但没有成功 找出代码出错位置
  • R:通过引用函数传递 data.frame

    我通过一个data frame作为想要更改内部数据的函数的参数 x lt data frame value c 1 2 3 4 f lt function d for i in 1 nrow d if d value i 2 0 d val
  • 如何知道用户点击了“X”或“关闭”按钮?

    在MSDN中我发现CloseReason UserClosing知道用户已决定关闭表单 但我想单击 X 按钮或单击关闭按钮是相同的 那么我如何在代码中区分这两者呢 谢谢大家 假设您需要 WinForms 您可以使用FormClosing 事
  • 在 emacs python shell 中重新加载更改的 python 文件

    在 emacs Python shell 我正在运行 2 Python 中 我正在导入一个正在使用的 py 文件并测试代码 但是 如果我更改代码 我不知道如何再次导入它 从我到目前为止的阅读看来 reload modulename 应该有效
  • 在 AsyncTask 中获取上下文

    我正在尝试获取名为 Opciones 的类的 AsyncTask 中的上下文 该类是唯一调用该任务的类 但我不知道该怎么做 我看到了一些如下代码 protected void onPostExecute Long result Toast
  • 如何指定 FCM 消息的优先级?

    我正在使用 React native firebase 来管理 React native 应用程序上的通知 当应用程序关闭时 我尝试在后台处理 FCM 消息而不显示通知 我正在使用 React native firebase 来管理 Rea
  • 按编号搜索并使用 ABAddressBook 获取图像

    我希望使用号码作为键通过我的应用程序在 iphone 地址簿中进行搜索 然后检索与该联系人关联的图像并将其显示在 UIImageView 上 我尝试使用 ABAddressBook 框架 但无法继续 任何人都可以建议我解决方案或我可以遵循的
  • 绝对导入会导致 ModuleNotFoundError

    Python 3 6 我已经编写了一些组件 并且正在尝试将其中一个组件导入另一个组件中 下面是我的项目结构 components init py extract python3 init py extract py transform py
  • Laravel 5.2 中 auth()->user() 为 null

    我刚刚将 Composer 更新到 Laravel 5 2 无法查看受密码保护的页面 基本上下面的代码行不起作用 auth gt user 有人可以建议为什么这不起作用吗 确保任何需要会话 Auth 使用的 的路由都位于 web 中间件组
  • 使用应用内购买来解锁功能与使用 iPhone 的免费和付费应用版本

    我有一个应用程序 我打算将其作为具有部分全部功能的免费 精简版 版本和具有高级功能的付费完整版本发布 现在 通过在应用程序内购买免费应用程序 我正在考虑走这条路 能够根据需要解锁功能 我不是在谈论过期的试用版 基本上 我希望人们能够试用该应
  • 创建未知类型的数组

    我有一个对象 我必须验证该问题的值 对象的一些属性是自定义对象的数组 这样它将涉及到对数组的各个元素进行一些深入研究 为每个元素执行 getter 例如 AttribGrp x Object getAttribGrp x i getSome
  • 在.net中加载dll而不锁定它

    我正在执行一项任务 其中我必须加载 dll 并从中获取一些信息 例如类名等 但是当我将该 dll 加载到我的代码中时 它被锁定并且无法从源代码构建 直到我关闭加载程序 我尝试了某些解决方案 但没有一个适合我 Shadowcopy 在这种情况
  • 如何在 AngularJS 中动态更改 CSS 属性

    现在我有一个背景图像 URL 硬编码到 CSS 中 我想使用 AngularJS 中的逻辑动态选择背景图像 这是我目前拥有的 HTML div class offer detail image div div CSS offer detai
  • IPython Notebook 错误:加载笔记本时出错

    在过去的几分钟内 我无法访问任何 ipynb以前用Python3 4创建的文件 我进入包含这些文件的子目录 输入 ipython3 notebook 当我打开 新 笔记本时 出现以下错误 Unexpected error while sav
  • 服务层中的授权和用户信息(.NET 应用程序)

    我目前正在 NET 环境 n 层 中使用企业应用程序 我想知道在我的 BusinessLayer BL 中管理身份验证 授权 数据过滤的最佳方法 我们将从多个接口 ASP NET 应用程序和 Web 服务 使用该 BL 我认为我的 Serv