asp.net-mvc - ASP.NET MVC2 和 MemberShipProvider : How well do they go together?

标签 asp.net-mvc forms-authentication membership-provider

我有一个现有的 ASP.NET 应用程序,有很多用户和一个大型数据库。现在我想在 MVC 2 中使用它。我不想迁移,我或多或少地从头开始。我想保留的数据库,不要接触太多。

我已经有了我的数据库表,我还想保留我的 LINQ to SQL-Layer。我在当前的实现中没有使用 MembershipProvider(在没有得到强烈支持的 ASP.NET 1.0 中)。

因此,要么我编写自己的 Membershipprovider 来满足我的数据库和应用程序的需求,要么我根本不使用membershipprovider。

如果我不使用成员(member)提供程序,我想了解后果。与此有什么关系?我知道在 ASP.NET 中,登录控件链接到提供程序。使用 MVC2 自动生成的 AccountModel 可以轻松更改以支持我现有的逻辑。

当用户被 AuthCookie 识别时会发生什么?那么 MVC 是否使用 MembershipProvider 呢?

我是否忽略了什么?
我对 RoleProvider 有同样的问题。

非常感谢输入。

最佳答案

使用 MVC 很容易完全绕过 Membership 和 Role 提供者框架。有时这样做比实现自定义成员/角色提供者更容易,特别是如果您的 authn/authz 模型不太适合这些提供者的模式。

首先,您应该意识到您不需要从头开始编写所有内容,您可以使用核心 Forms 身份验证 API,它可以独立于 Membership/Role provider 框架使用:

  • FormsAuthentication.SetAuthCookie ——
    在用户被调用后调用它
    已认证,指定用户名
  • Request.IsAuthenticated - 退货
    如果 SetAuthCookie 被调用,则为 true
  • HttpContext.Current.User.Identity.Name - 返回调用 SetAuthCookie 时指定的用户名

  • 所以这里是你在 MVC 中所做的绕过 Membership/Role 提供者的操作:
  • 认证 : 在你的
    Controller ,验证用户
    使用您的自定义逻辑。如果
    成功,打电话FormsAuthentication.SetAuthCookie与用户名。
  • 授权 : 创建自定义
    授权属性(源自
    授权属性)。在里面AuthorizeCore覆盖,实现
    您的自定义授权逻辑,
    将用户带入HttpContext.Current.User.Identity.Name以及角色中定义的角色
    AuthorizeAttribute 基类的属性。
    请注意,您还可以在自定义上定义属性
    授权属性并在您的授权逻辑中使用它。
    例如,您可以将表示角色的属性定义为枚举值
    特定于您的应用程序,而不是使用只是字符串的 Roles 属性。
  • 将您的 Controller 和 Action 与您的
    自定义授权属性,
    而不是默认的授权
    属性。
  • 关于asp.net-mvc - ASP.NET MVC2 和 MemberShipProvider : How well do they go together?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3065288/

    相关文章:

    c# - 除了我自己的客户端代码之外,如何防止访问 URL?

    forms-authentication - 自定义.NET身份验证,成员身份,Portlet的概要文件提供程序?

    asp.net-mvc - 成员(member)提供商中的 GetAllUsers 在哪里?

    asp.net-mvc - 如何自定义简单的成员资格提供程序以使用我自己的数据库 ASP.NET mvc 4

    ASP.Net MVC3 Azure - 我需要成员(member)提供程序存储过程吗?

    jquery - 剑道网格 : Delete button without X icon

    c# - MVC : Pagination hindering the way a list is sorted

    asp.net-mvc - 升级到 Visual Studio 2015 导致项目智能感知损坏

    c# - 自定义授权属性捕获请求的角色

    asp.net - 表单例份验证 SSO - 为什么 User.Identity.IsAuthenticated == false