【问题标题】:How to create user authentication in .NET web application?如何在 .NET Web 应用程序中创建用户身份验证?
【发布时间】:2013-01-02 07:16:53
【问题描述】:

我正在创建 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; }
    }
}

我需要创建用户注册和用户登录。应用程序需要知道用户是否登录。

是否有一些最佳实践如何做到这一点?保存会话中的登录用户?

【问题讨论】:

    标签: asp.net-mvc authentication


    【解决方案1】:

    我将使用 ASP.NET 成员资格和角色提供者模型。如果您想使用自定义表来执行此操作,您可以创建一个从 Membership Provider 继承的类。您可以实施多种方法来支持更改密码、忘记密码等操作……但用于登录的方法是 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
    }
    

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

    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 和角色提供者的更多信息

    【讨论】:

    • 我实现了自定义会员提供程序,它现在可以正常工作了,谢谢!
    【解决方案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

    【讨论】:

    • 我需要非常简单的实现用户登录和注册操作。不幸的是,这是学校项目,所以我需要自己编程。你有什么建议?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2019-11-21
    相关资源
    最近更新 更多