ASP.NET MVC Cookie 身份验证

1 创建一个ASP.NET MVC 项目

添加一个 AccountController 类。

public class AccountController : Controller
    {
        [HttpGet]
        public ActionResult Login(string returnUrl)
        {
            ViewBag.ReturnUrl = returnUrl;
            return View();
        }
        [HttpPost]
        public ActionResult Login(string userName, string password,string returnUrl)
        {
            if (CheckLogin(userName, password))
            {
                //加入票据 //保存身份信息
                AccountModel ModelUser = new AccountModel() { UserName = userName, Password = password };
                string UserData = JsonConvert.SerializeObject(ModelUser);//序列化用户实体
                FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddHours(1), false, UserData);
                HttpCookie Cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(Ticket));//加密身份信息,保存至Cookie
                Response.Cookies.Add(Cookie);

                if (string.IsNullOrEmpty(returnUrl))
                {
                    return Redirect("~/Home/Index");
                }
                else
                {
                    return Redirect(returnUrl);
                }

            }
            else
            {
                return View("Login", new ResultModel<string>() { Code = 1, Message = "用户名或密码错误" });
            }

        }
        public ActionResult Logout()
        {
            FormsAuthentication.SignOut();
            return RedirectToAction("Login");
        }

        private bool CheckLogin(string userName, string password)
        {
            return MvcApplication.DBList.Any(n => n.UserName == userName && n.Password == password);
        }

    }

2 添加一个 自定义attribute ,用来过滤身份登录

public class CheckLoginAttribute :ActionFilterAttribute
    {

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //如果存在身份信息
            if (!HttpContext.Current.User.Identity.IsAuthenticated)
            {
                ContentResult Content = new ContentResult();
                string url = string.Format("{0}?returnUrl={1}", FormsAuthentication.LoginUrl, filterContext.HttpContext.Request.RawUrl);
                Content.Content = string.Format("<script type=‘text/javascript‘>alert(‘请先登录!‘);window.location.href=‘{0}‘;</script>", url);
                filterContext.Result = Content;
            }
            //else
            //{
            //    string[] Role = CheckLogin.Instance.GetUser().Roles.Split(‘,‘);//获取所有角色
            //    if (!Role.Contains(Code))//验证权限
            //    {
            //        //验证不通过
            //        ContentResult Content = new ContentResult();
            //        Content.Content = "<script type=‘text/javascript‘>alert(‘权限验证不通过!‘);history.go(-1);</script>";
            //        filterContext.Result = Content;
            //    }
            //}
        }
    }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

3  设置 web.config ,  注意 一定要添加 mode=“Forms”

  <system.web>
     ....
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" name=".iamshop" ></forms>
    </authentication>
    ...
  </system.web>
 

4 需要添加权限验证的地方: 标记一个[CheckLogin] 属性

        [CheckLogin]
        public ActionResult Index()
        {
            //获取登录信息
            ViewBag.UserName = User.Identity.Name;
            //获取对象
           // FormsIdentity ticket = (FormsIdentity)User.Identity;
            HttpCookie authCookie = HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName];//获取cookie
            FormsAuthenticationTicket Ticket = FormsAuthentication.Decrypt(authCookie.Value);//解密
           // AccountModel account = (AccountModel)JsonConvert.DeserializeObject(Ticket.UserData);//反序列化
            AccountModel account= JsonConvert.DeserializeObject<AccountModel>(Ticket.UserData);
            ViewBag.AccountName = account.UserName;
            ViewBag.Password = account.Password;

            return View();
        }
 
网上身份验证代码很多,参考后做的一个笔记,需要使用时,根据情况修改使用。
 

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

时间: 2024-08-23 17:17:50

ASP.NET MVC Cookie 身份验证的相关文章

asp.net mvc 自定义身份验证 2

控制成员角色 [Authorize(Rroles="Administator,SuperAdmin")] public class StoreManagerController:Controller 或者授权给部分用户 [Authorize(Users="jon,pp")] [Authorize(Roles="admin",Users="jon,pp")]

采用Asp.Net的Forms身份验证时,持久Cookie的过期时间会自动扩展

问题描述 之前没有使用Forms身份验证时,如果在登陆过程中把持久的Cookie过期时间设为半个小时,总会收到很多用户的抱怨,说登陆一会就过期了. 所以总是会把Cookie过期时间设的长一些,比如两个小时甚至一天,这样就能保证在登陆时设置一次Cookie,用户可以操作很长时间也不过期. 虽然也可以在每次用户请求页面时检查Cookie的过期时间并自动扩展,但未免过于麻烦,不如一次设大点来的简单. 偶然发现 今天在使用Forms身份验证编写<AppBox-基于ExtAspNet的企业通用管理框架>

采用Asp.Net的Forms身份验证时,非持久Cookie的过期时间会自动扩展

问题描述 之前没有使用Forms身份验证时,如果在登陆过程中把HttpOnly的Cookie过期时间设为半个小时,总会收到很多用户的抱怨,说登陆一会就过期了. 所以总是会把Cookie过期时间设的长一些,比如两个小时甚至一天,这样就能保证在登陆时设置一次Cookie,用户可以操作很长时间也不过期. 虽然也可以在每次用户请求页面时检查Cookie的过期时间并自动扩展,但未免过于麻烦,不如一次设大点来的简单. 偶然发现 今天在使用Forms身份验证编写<AppBox-基于ExtAspNet的企业通用

asp.net core中使用cookie身份验证

配置 在 Startup.ConfigureServices 方法中,创建具有 AddAuthentication 和 AddCookie 方法的身份验证中间件服务: services.AddAuthentication(Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { // Cookie settings o

简单服务器端Blazor Cookie身份验证的演示

为了演示身份验证如何在服务器端 Blazor 应用程序中工作,我们将把身份验证简化为最基本的元素. 我们将简单地设置一个 cookie,然后读取应用程序中的 cookie. 应用程序身份验证 大多数商业 web 应用程序都要求用户登录到应用程序中. 用户输入他们的用户名和密码,对照成员资格数据库进行检查. 一旦通过身份验证,该应用程序即可识别用户,并且现在可以安全地传递内容. 理解了服务器端 Blazor 应用程序的身份验证过程,我们就可以实现一个满足我们需要的身份验证和成员资格管理系统(例如,

ASP.NET MVC的客户端验证:jQuery的验证

http://www.cnblogs.com/artech/archive/2012/06/17/client-validation-01.html 之前我们一直讨论的Model验证仅限于服务端验证,即在Web服务器根据相应的规则对请求数据实施验证.如果我们能够在客户端(浏览器)对用户输入的数据先进行验证,这样会减少针对服务器请求的频率,从而缓解Web服务器访问的压力.ASP.MVC 2.0及其之前的版本采用ASP.NET Ajax进行客户端验证,在ASP.NET MVC 3.0中,jQuery

ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现

原文:ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现 在简单了解了Unobtrusive JavaScript形式的验证在jQuery中的编程方式之后,我们来介绍ASP.NET MVC是如何利用它实现客户端验证的.服务端验证最终实现在相应的ModelValidator中,而最终的验证规则定义在相应的ValidationAttribute中:而客户端验证规则通过HtmlHelper<TModel>相应的扩展方法(比如TextBoxFor.EditorFor和Edid

Identity Server 4 - Hybrid Flow - MVC客户端身份验证

预备知识 可能需要看一点点预备知识 OAuth 2.0 不完全简介: https://www.cnblogs.com/cgzl/p/9221488.html OpenID Connect 不完全简介: https://www.cnblogs.com/cgzl/p/9231219.html 回顾一下OAuth 2.0 和 OpenID Connect OAuth 2.0 vs OpenID Connect 角色对应 客户端/依赖方的类型 OAuth 2.0 vs OpenID Connect 端点

ASP.NET Web API身份验证和授权

英语原文地址:http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api 本文是作者所理解和翻译的内容. 这篇文章包括两部分:身份验证和授权. 身份验证用来确定一个用户的身份.例如,Alice用她的用户名和密码登陆系统,服务器用她的用户名和密码来确定她的身份. 授权是判断一个用户是否允许执行某一操作.例如,Alice有获取资源的许可,但不能创建资源. 身份验证 We