身份认证的含义:例如在现在浏览的某宝电商网站中会经常遇到的情况,想要将某件商品加入到购物车,点击“加入购物车”之后弹出的却是登录界面。这个就是所谓的请求的身份认证

身份认证与Session

基于Session保存用户状态

  1. 基于Session保存用户状态和信息,比如:用户登录信息,相当于授权

  2. 在访问具体页面时,如果检测到没有登录,则禁止用户某些动作

不足之处

  1. Session具有生命周期,超过规定时间,用户就必须要重新登录

  2. Session有各种丢失的可能,例如服务器重启,内存回收等,这样会影响用户的体验

ASP.NET身份验证

验证方式 说明
Windows 使用windows操作系统和NTFS文件系统验证,适合公司内部站点使用,不适合大众商业站点
Forms 利用网页向客户端发送凭证,客户端再把凭证提交给应用程序进行身份认证(使用最普遍)
Passport 一种单点登录标准(微软提供,使用需要付费,国内采用的较少)
Federated 一种单点登录标准(谷歌提供,一种联合身份验证标准)

Forms验证

  1. 在实际开发中应用最普遍

  2. 最初由亚马逊网站开发使用,在内部使用Cookie来维护页面之间的状态

  3. 在ASP.NET MVC中提供了一个FormsAuthentication类专门用于身份认证服务

  4. FormsAuthentication类的一个功能就是写入一个标识用户身份的Cookie

FormsAuthentication类

属性或方法 说明
string LoginUrl 用户访问且验证不通过时,重定向到的登录页面的URL
TimeSpan TimeOut 获取身份验证票证的到期前的时间量
void SetAuthCookie(string userName,bool createPersistentCookie) 为提供的用户名创建一个身份验证票据,并将该票据添加到响应的Cookie集合或Url中,常用于登录
viod SignOut() 从浏览器中删除Forms身份验证票据,常用语注销
string Encrypt(FormsAuthenticationTicket ticket) 将验证票据对象加密成一个字符串
FormsAuthenticationTicket Decrypt(string encryptedTicket) 将加密过的用户身份票据字符串解密成一个票据对象

实现Forms验证

  1. 编写带有身份验证的登录动作方法

           
     [HttpPost]public ActionResult UserLogin(UserInfor user){UserServer server = new UserServer();UserInfor currentUser = server.UserLogin(user);if (currentUser!=null)//登录成功{//为当前用户名提供一个身份验证票据,并将该票据添加到CookieFormsAuthentication.SetAuthCookie(currentUser.Name,false);ViewBag.Infor = $"欢迎您:{currentUser.Name}";return View("Index");}else{ViewBag.Infor = "用户名或密码错误!";return View("Login");}   }
        
    <div> <form action="~/Home/UserLogin" method="post"><table><tr><td>用户名:</td><td><input type="text" name="Id" value="" /></td></tr><tr><td>密码:</td><td><input type="password" name="Pwd" value="" /></td></tr><tr><td></td><td><input type="submit" value="登录" /></td></tr></table><div>@ViewBag.Infor</div></form></div>

    SetAuthCookie方法中的两个参数

    1. 第一个参数给currentUser.Name当前登录人员的名字,也就是验证票据存在,那么验证票据中保存的就是登录人员的名字

    2. 第二个参数如果为true,表示永远不过期的Cookie,只要用户登录后,以后都不需要进行重新登录了除非客户端主动把Cookie清除

  2. 使用User对象检查用户是否已验证

    User对象封装了用户身份票据

    可用于控制代码的权限

            
    public ActionResult UserManager(){if (this.User.Identity.IsAuthenticated){string adminName = this.User.Identity.Name;//读取写入的AdminNameViewBag.adminName = adminName;UserServer server = new UserServer();ViewBag.AdminList = server.GetUserInfors();return View();}else{return RedirectToAction("Login", "Home");}}
  3. 修改根目录中Web.config配置文件

     <system.web><compilation debug="true" targetFramework="4.7"/><httpRuntime targetFramework="4.7"/><authentication mode="Forms"><forms loginUrl="~/Home/Login" timeout="2880"></forms></authentication></system.web>
    1. mode:身份验证的方式(Forms,None,Password,Windows)

    2. loginurl:当前用户直接访问带有验证检测的页面时,如果没有验证通过,跳转到url(一般都设置的是登录页面)

    3. timeout:Cookie的有效期,单位为“分钟”,2880表示两天时间

只要是哪个页面需要做用户身份认证动作方法中都要写一个判断,所以相对而言比较繁琐

用户注销

用户登录之后,根据需要可以注销当前用户票据

       
 public ActionResult UserExit(){FormsAuthentication.SignOut();return View("~/Home/Index");}

Authorize特性实现授权

Authorize特性

  1. 更方便的实现身份授权

  2. 应用在控制器上:拥有票据的用户具备访问这个控制器内所有动作方法的权限,如果要使用则必须要考虑清楚,是否在控制器中的每个动作方法都需要进行身份验证,如果哪个方法不需要身份验证,则这个方法不应该出现在这个控制器中

  3. 应用在动作方法上:拥有票据的用户具备访问该动作方法的权限,和给每个动作方法中添加票据验证效果一样,哪个动作方法具有该特性则就会有验证

总结

使用Authorize特性实现授权和User对象效果相同,但是Authorize可以实现更多复杂的功能

Authorize实现高级授权

可以按照指定用户名进行授权

 [Authorize(Users ="小红")]public ActionResult UserManager(){string adminName = this.User.Identity.Name;//读取写入的AdminNameViewBag.adminName = adminName;UserServer server = new UserServer();ViewBag.AdminList = server.GetUserInfors();return View();}

只有当登录用户的名字是"小红"的时候才能通过身份验证,其他人没有权限进入管理界面

ASP.NET MVC --- 身份认证与授权相关推荐

  1. ASP.NET MVC身份认证与授权

    文章目录 一.引言 1.身份认证的含义 2.身份认证与Session 基于Session保存用户状态 不足之处 二.ASP.NET身份验证 Forms验证 FormsAuthentication类 验 ...

  2. [转载]细说ASP.NET Windows身份认证

    细说ASP.NET Windows身份认证 阅读目录 开始 认识ASP.NET Windows身份认证 访问 Active Directory 在ASP.NET中访问Active Directory ...

  3. 快速理解ASP.NET Core的认证与授权

    ASP.NET Core的认证与授权已经不是什么新鲜事了,微软官方的文档对于如何在ASP.NET Core中实现认证与授权有着非常详细深入的介绍.但有时候在开发过程中,我们也往往会感觉无从下手,或者由 ...

  4. 实战解读ASP.NET Core身份认证

    长话短说:上文我们聊了 ASP.NET Core 基于声明的访问控制到底是什么鬼? 今天我们乘胜追击:聊一聊ASP.NET Core 中的身份验证. 身份验证是确定用户身份的过程.授权是确定用户是否有 ...

  5. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权

    在上一讲中,我们已经完成了一个完整的案例,在这个案例中,我们可以通过Angular单页面应用(SPA)进行登录,然后通过后端的Ocelot API网关整合IdentityServer4完成身份认证.在 ...

  6. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(二)

    上文已经介绍了Identity Service的实现过程.今天我们继续,实现一个简单的Weather API和一个基于Ocelot的API网关. 回顾 <Angular SPA基于Ocelot ...

  7. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(一)

    好吧,这个题目我也想了很久,不知道如何用最简单的几个字来概括这篇文章,原本打算取名<Angular单页面应用基于Ocelot API网关与IdentityServer4+ASP.NET Iden ...

  8. 细说ASP.NET Forms身份认证

    细说ASP.NET Forms身份认证 阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 ...

  9. Asp.Net MVC 身份验证-Forms

    Asp.Net MVC 身份验证-Forms 在MVC中对于需要登录才可以访问的页面,只需要在对应的Controller或Action上添加特性[Authorize]就可以限制非登录用户访问该页面.那 ...

最新文章

  1. WSS 代码执行的权限提升
  2. 从一个小故事聊聊字符编码那些事
  3. ElasticSearch探索之路(六)实战:环境搭建、REST、CRUD、Search
  4. 软件工程--软件危机-生命周期-软件过程
  5. 带有Java Util日志记录的Java 8延迟调用
  6. 返回数组中的最大数 -freeCodeCamp
  7. 【转】TCP和UDP的区别
  8. MNIST数据集手写数字识别(一)
  9. Centos7升级Python2到Python3
  10. wpsppt流程图联系效果_wps幻灯片怎么制作流程图
  11. 分布式系统接口幂等性
  12. Mac下修改文档编码方式
  13. python调用sqlldr_sqlldr用法
  14. LCL三相pwm整流器(逆变器)
  15. 【Windows 10系统】惠普打印机解决打印机状态已暂停
  16. # SIGPROC --- 脉冲星信号处理程序-详解
  17. 捋一捋Vue构造函数
  18. SpringBoot项目中华为云 内容审核的使用(内附代码)
  19. Stroke – 开源鼠标手势软件[Windows]
  20. 官宣, CSDN 2018博客之星获奖名单!

热门文章

  1. 微光集市-商品及其商品信息的显示(版本1.0)
  2. 用批处理命令打开控制面板选项
  3. 如何解决直播中黑屏、花屏、闪屏问题?10 分钟搞明白
  4. 7个最佳WordPress视频库插件
  5. c语言 测试有哪种天赋,c语言是指什么
  6. springboot学习_Spring Boot 开源学习项目代码日爆爆爆
  7. TextView Recyclerview省略号相关
  8. C#数据结构:两栈实现队列,两队列实现栈
  9. FPGA和外围接口-第一章 爱上FPGA(1.4 FPGA开源网站和论坛))
  10. C++实现行列式的相关操作