asp.net-mvc - 我应该如何在 ASP.Net MVC 站点中进行身份验证?

标签 asp.net-mvc authentication asp.net-mvc-2 personalization

我有一个需要身份验证的区域的站点。现在,我在该区域的所有 Controller 上使用角色属性,并运行查询以检索该用户 ID 及其所有设置。

每次加载该区域的 Controller 时,我都在检索用户 ID 和设置,这对我来说似乎是一种代码或设计气味?我不确定我是否应该使用 session ,或者 ASP.Net MVC 2.0 是否提供了一些独特的方法来处理这个问题。另一个问题是安全性。

总的来说,我真的不知道该转向哪个方向。设计明智我希望用户登录到该区域时只检索一次用户 ID 和设置。现在,每次 Controller 加载时我都会获取 userId,然后如果需要,我也会每次都查询数据库以获取它们的设置。

最佳答案

关于安全的规则之一是你不应该尝试自己做。在不留下漏洞或后门的情况下正确地进行身份验证系统存在许多缺陷。因此,在这方面,您可能会考虑 .NET 附带的 SqlMembershipProvider。它可以与 MVC 一起使用,并提供获取角色和当前安全上下文的方法,易于设置和配置,并且比自己滚动更安全。

如果您不使用 SQL Server,您有几个选择。一种解决方案是使用 SQL Server Express 或 SQL Server Compact Edition 之类的东西来维护凭据。另一种解决方案是模仿 SqlMembrshipProvider 数据库架构,然后编写与该架构通信的自定义提供程序。

最后的选择是编写一个自定义 MembershipProvider 类。虽然这仍然是您自己的,但它会强制您进入 MembershipProvider 的结构,以便您可以在以后将其换成不同的(例如 ActiveDirectoryMembershipProvider),并提供用于与凭据和登录交互的通用接口(interface),例如可以轻松使用内置的登录控件。

如果您已经在使用 MembershipProvider 并且正在询问是否存储其他用户特定的数据,那么我会建议 SqlProfileProvider 以及我上面提到的关于 SqlMembershipProvider 的所有警告。 ProfileProvider 提供了一种结构,用于与当前登录的用户一起维护用户特定的数据。

了解更多信息:

  • Introduction to Membership
  • Implementing a MembershipProvider
  • ASP.NET Profile Providers
  • 关于asp.net-mvc - 我应该如何在 ASP.Net MVC 站点中进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2960091/

    相关文章:

    jquery - Kendo chunk上传不分割上传的文件

    asp.net-mvc - ASP.NET MVC 2 中的 Web.config 转换和额外的 Web.config 文件

    mysql - 如何让ELMAH登录MySQL?

    java - Spring Security @PreAuthorize-ProviderNotFoundException

    web-services - 使用通过网页获取的智能卡凭据

    java - 哪种方法更适合用于登录表单 doget() 或 dopost()

    asp.net-mvc - 读取 RedirectToRouteResult 的 RouteValues 字典

    asp.net-mvc - 不带前缀的 Asp.net mvc 2 模板

    c# - View 中的 MVC If 语句

    javascript - 后操作后 View 中未收到 ViewBag