如何在.NET Web应用程序中创建用户身份验证?

时间:2013-01-01 20:19:45

标签: asp.net-mvc authentication

我正在创建ASP.NET MVC Web应用程序。我有数据模型用户:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Knihovna.Models
{
    public class User
    {
        public int UserId { get; set; }
        public string Name { get; set; }
        public string Login { get; set; }
        public string Password { get; set; }
        public List<Book> Books { get; set; }
    }
}

我需要创建用户注册和用户登录。应用程序需要知道如果用户已登录。

有一些最佳做法怎么做?将登录用户保存在会话中?

2 个答案:

答案 0 :(得分:2)

我会使用ASP.NET成员资格和角色提供程序模型。如果您希望使用自定义表执行此操作,则可以创建一个继承自成员资格提供程序的类。您可以实现许多方法来支持更改密码,忘记密码等内容......但登录的方法是ValidateUser

public sealed class MyMembershipProvider : MembershipProvider
{
    public override bool ValidateUser(string username, string password)
    {
        bool isValid = false;
        // your authentication logic here
        var ticket = new FormsAuthenticationTicket(
                    1,
                    YOUR_USER_ID_HERE,
                    DateTime.Now,
                    DateTime.Now.AddMinutes(30),
                    false,
                    name,
                    FormsAuthentication.FormsCookiePath);

                var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
                HttpContext.Current.Response.Cookies.Add(authCookie);

        return isValid;
    }
}

如果您希望有不同级别的用户,还需要创建角色提供程序。为此,您将从RoleProvider类继承。

public sealed class MyRoleProvider : RoleProvider
{
   // Implement logic here
}

要授权应用程序的某些区域,您可以使用“授权”属性。

public class MyController : Controller
{
     [Authorize(Roles="Role1,Role2")]
     public ActionResult Index()
     {
         // Implement your code
     }
}

最后,您需要在web.config中进行一些配置才能使其使用您的提供程序。

<authentication mode="Forms">
  <forms loginUrl="~/Login" timeout="2880"/>
</authentication>
<membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="20">
  <providers>
    <clear/>
    <add name="MyMembershipProvider" type="Your.NameSpace.MyMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" writeExceptionsToEventLog="false"/>
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="MyRoleProvider" cacheRolesInCookie="true">
  <providers>
    <clear/>
    <add name="MyRoleProvider" type="Your.NameSpace.MyRoleProvider"/>
  </providers>
</roleManager>

您可以在MSDN上找到有关memberhsip和角色提供程序的更多信息

答案 1 :(得分:2)

没有必要搞砸Session对象。

由于您已经在使用ASP.NET MVC,因此您的Controllers文件夹中可能有AccountController。该控制器具有基本的身份验证方法。

我建议您看一下ASP.NET团队的本教程,该团队解释然后向您展示如何在ASP.NET MVC中使用身份验证+授权。

  

ASP.NET MVC的默认Visual Studio项目模板   新的ASP.NET MVC时自动启用表单身份验证   应用程序已创建。它还会自动添加预先构建的   帐户登录页面实现到项目 - 这使它   非常容易在网站中集成安全性。

NerdDinner Step 9: Authentication and Authorization