在每个请求上使用基于角色的自定义身份验证查询数据库的正确方法 ASP.NET MVC

2023-12-07

这可能是一个有点无知的问题,但我是 mvc 新手,所以我很抱歉!

我研究了书呆子晚餐身份验证模型,但在我的应用程序中,我有一个复杂的基于角色的身份验证。所以我做的是这样的:

 void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e)
        {
            HttpCookie authCookie = HttpContext.Current.Request
               .Cookies[FormsAuthentication.FormsCookieName];
            if (authCookie != null)
            {
                string encTicket = authCookie.Value;
                if (!String.IsNullOrEmpty(encTicket))
                {
                    FormsAuthenticationTicket ticket = 
                            FormsAuthentication.Decrypt(encTicket);
                    CustomIdentity id = new CustomIdentity(ticket.Name);
                    GenericPrincipal prin = new GenericPrincipal(id, id.Roles);
                    HttpContext.Current.User = prin;
                }
            }
        }

在登录时,我使用 FormsAuth 验证用户名/密码,然后创建 cookie。

这里的问题是每次我创建自定义身份时,我都必须查询数据库中的用户角色。有没有correct解决这个问题还是我正在做正确的事情来查询每个传入请求的数据库?我应该将角色列表保存在 cookie 或其他东西中吗?

我也不太明白 forms auth 如何处理身份验证的整个生命周期?我用同样的IFormsAuthentication书呆子晚餐用户和登录期间我打电话的设计模式FormsAuth.SignIn()这又调用FormsAuthentication.SetAuthCookie,什么时候能够调用membershipservice.validateuser()方法 ??另外如果验证 cookie 已设置为什么书呆子晚餐会创建一张票,然后将其添加到请求中,然后在期间阅读它PostAuthenticationRequest检查它是哪个用户。工单操作是否像会话一样?

谢谢!圣诞节快乐!


Update : 这个链接让我对表单身份验证票证有了更好的理解。


“正确的?”这是一个见仁见智的问题。

我想说,如果您没有遇到由该查询引起的数据库性能问题,那么就不用担心。

如果是,您可以将身份验证代码集中到某种身份验证提供程序或类型中,并将身份验证信息缓存在内存中,直到写入更新数据库,这会同时使缓存失效。

(你的第二个问题本身就很好;我没有足够的信息来回答它。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在每个请求上使用基于角色的自定义身份验证查询数据库的正确方法 ASP.NET MVC 的相关文章

随机推荐

  • CancellationToken 的竞争条件,其中 CancellationTokenSource 仅在主线程上取消

    考虑一个 Winforms 应用程序 其中我们有一个可以生成一些结果的按钮 如果用户第二次按下该按钮 则应取消第一个生成结果的请求并开始新的请求 我们正在使用以下模式 但我们不确定某些代码是否是防止竞争条件所必需的 请参阅注释掉的行 pri
  • 使用officer包编辑Word表格

    我正在尝试使用 officer 编辑Word表格的值 非常简单地找到包含它的 段落 library officer doc read docx template docx doc cursor begin doc doc cursor re
  • 需要格式化 JAXB 输出的帮助

    我有一些对象 比如说两个 A 和 B 这些对象来自同一类 我需要使用 JAXB 封送这些对象 并且输出 XML 应采用以下形式
  • Java SE 还是 Java EE(标准或企业)?

    我开始做大量 Java EE 开发工作 可以在我的家用计算机上安装 Java EE 而不是 JRE 吗 另外 GlassFish 可以在 JRE 上运行还是需要 Java EE Java EE 是一个抽象 API GlassFish 是可用
  • 防止更新禁用视图上的注释/文件

    我注意到当网格不允许更新 插入或删除时 可以在网格上插入 更新 删除注释和文件 假设形式相同 有办法关掉它吗 我正在编写一个自定义页面 并希望阻止用户修改任何内容 包括注释和文件 我的网格包含以下内容 MyGrid AllowInsert
  • C++ 中的多重调度

    我想了解什么是多重调度 我读了很多不同的文本 但我仍然不知道多重调度是什么以及它有什么好处 也许我缺少的是使用多重调度的代码片段 请问 您能否使用多重分派在 C 中编写一小段代码 以便我可以看到它无法正确编译 运行 因为 C 只有单分派 我
  • 为 azure vm 和 godaddy 配置自定义域名

    最近我开始在 azure 配置我的虚拟机 我使用 nginx 部署了 4 个项目 但在使用 godaddy 配置我的虚拟机时遇到了问题 要在 Godaddy 中配置域名 我需要设置至少 2 个 DNS 地址 但我的虚拟机只有 1 个 DNS
  • 液体和算术

    我正在研究一些分页 我想知道是否有办法告诉 Liquid 只显示 5 页 我正在寻找的输出是 78 9 最后 gt gt 我目前的逻辑有效 但它显示了所有 30 个页面 for count in 2 paginator total page
  • ggplot2:geom_smooth 选择观测值连接(相当于 geom_path())

    我在用ggplot2创建海洋的垂直剖面 我的原始数据集创建 尖峰 以便形成平滑的曲线 我希望使用geom smooth 我还希望线条根据观察的顺序 而不是根据 x 轴 进行 当我使用geom path 它适用于原始情节 但不适用于结果geo
  • Postgres:使用游标更新的令人惊讶的性能

    考虑以下两个 Python 代码示例 它们实现了相同的效果 但具有显着且令人惊讶的性能差异 import psycopg2 time conn psycopg2 connect dbname mydatabase user postgres
  • 虚函数和多态性

    假设我有这个 class A public virtual int hello A a class B public A public int hello B b bla bla 所以 A是一个抽象类 1 在B类中 我定义了一个假设覆盖A类
  • 如何在 Wix 中为 MSI 创建自定义 UI?

    我想使用 Wix 增强 MSI 的 UI 对话框 您能给我指出提供创建此类 UI 选项的最佳工具吗 另外 是否可以在 MSI 向导中显示动画 GIF 图像 您想要查看 嵌入式 UI 有时也称为 外部 UI 但是一旦您沿着这条路走下去 您就必
  • 在 PHP 中用另一个符号替换反斜杠

    一直在努力用另一个符号 例如 替换反斜杠只是为了指示反斜杠的位置 因为我无法发送诸如 C xampp etc 之类的字符串 通过 url 作为 GET 变量 所以我想我首先用另一个符号替换该字符串中的反斜杠 然后通过 url 发送 然后将它
  • powershell中哈希表的数组/对象键

    使用数组键创建哈希时 如何生成键来查找哈希值 也就是说 无需从哈希的枚举器获取它 a a 1 b 2 c c1 3 使用常规数组似乎不起作用 k1 c c1 a ContainsKey k1 false 但是 如果在创建时使用数组对象 这似
  • IE 在高度 > 4096px 时显示透明度错误?

    当我在大页面上遇到问题时 我正在开发一个带有透明背景覆盖的 JavaScript 对话框 如果页面很大 透明覆盖层将是纯色 即不再透明 我做了一些测试 发现这只发生在覆盖层高度大于 4096 像素时 嗯 可疑 那是 2 12 有人可以验证这
  • 如何在 iOS (iPhone) 中使用 opencv 比较图像

    我想在我的项目中比较 iPhone 相机拍摄的 2 张图像 我正在使用 OpenCV 来做到这一点 还有其他更好的方法吗 如果我得到 相似度 那就太好了 我使用 OpenCV 以下代码进行图像比较 void opencvImageCompa
  • 找不到源中事件 ID 的描述

    当我将日志写入 Windows 事件日志时 我收到以下事件 此消息的根本原因是什么 以及如何修复它 非常感谢 事件 ID 51001 的描述 无法找到源 RRWS 引发此问题的组件 您的本地未安装事件 计算机或安装是 已损坏 您可以安装或修
  • 在android中使用AudioRecord录制立体声

    我正在寻找有关让 audioRecord 使用顶部安装和底部安装的麦克风的明确答案 因此我没有 2 个相同的 单声道 通道 我想知道我可以事先进行哪些轮询以确保小工具能够提供良好的流 我正在开发 Galaxy Nexus 5 但无法使其正常
  • 无法编译 C++ 项目(宏“max”传递了 3 个参数,但只需要 2 个)

    抱歉使用通用标题 但我不是 C 编译方面的专业人士 而且我似乎无法在这里找到错误 我正在查看一个官方项目 所以我知道该项目实际上应该可以正常编译 事实并非如此 如果有人想自己检查代码 请执行以下操作 cvs d pserver jvtuse
  • 在每个请求上使用基于角色的自定义身份验证查询数据库的正确方法 ASP.NET MVC

    这可能是一个有点无知的问题 但我是 mvc 新手 所以我很抱歉 我研究了书呆子晚餐身份验证模型 但在我的应用程序中 我有一个复杂的基于角色的身份验证 所以我做的是这样的 void MvcApplication PostAuthenticat