ASP.NET MVC身份认证与授权
文章目录
- 一、引言
- 1.身份认证的含义
- 2.身份认证与Session
- 基于Session保存用户状态
- 不足之处
- 二、ASP.NET身份验证
- Forms验证
- FormsAuthentication类
- 验证案例
- 1.Forms验证案例
- 2.使用User对象检查用户是否已验证
- 3.修改根目录中Web.config配置文件
- 4.用户注销
- 四、身份授权
- Authorize特性实现授权
- Authorize特性
- 注意
- Authorize实现高级授权案例
一、引言
1.身份认证的含义
例如:在现在浏览的某宝电商网站中会经常遇到的情况,想要将某件商品加入到购物车,点击“加入购物车”之后弹出的却是登录界面。这个就是所谓的请求的身份认证
2.身份认证与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) | 将加密过的用户身份票据字符串解密成一个票据对象 |
验证案例
1.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方法中的两个参数
- 第一个参数给currentUser.Name当前登录人员的名字,也就是验证票据存在,那么验证票据中保存的就是登录人员的名字
- 第二个参数如果为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表示两天时间
只要是哪个页面需要做用户身份认证动作方法中都要写一个判断,所以相对而言比较繁琐
4.用户注销
用户登录之后,根据需要可以注销当前用户票据
public ActionResult UserExit(){FormsAuthentication.SignOut();return View("~/Home/Index");}
四、身份授权
Authorize特性实现授权
Authorize特性
- 更方便的实现身份授权
- 应用在控制器上:拥有票据的用户具备访问这个控制器内所有动作方法的权限,如果要使用则必须要考虑清楚,是否在控制器中的每个动作方法都需要进行身份验证,如果哪个方法不需要身份验证,则这个方法不应该出现在这个控制器中
- 应用在动作方法上:拥有票据的用户具备访问该动作方法的权限,和给每个动作方法中添加票据验证效果一样,哪个动作方法具有该特性则就会有验证
注意
使用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身份认证与授权相关推荐
- ASP.NET MVC --- 身份认证与授权
身份认证的含义:例如在现在浏览的某宝电商网站中会经常遇到的情况,想要将某件商品加入到购物车,点击"加入购物车"之后弹出的却是登录界面.这个就是所谓的请求的身份认证 身份认证与Ses ...
- [转载]细说ASP.NET Windows身份认证
细说ASP.NET Windows身份认证 阅读目录 开始 认识ASP.NET Windows身份认证 访问 Active Directory 在ASP.NET中访问Active Directory ...
- 快速理解ASP.NET Core的认证与授权
ASP.NET Core的认证与授权已经不是什么新鲜事了,微软官方的文档对于如何在ASP.NET Core中实现认证与授权有着非常详细深入的介绍.但有时候在开发过程中,我们也往往会感觉无从下手,或者由 ...
- 实战解读ASP.NET Core身份认证
长话短说:上文我们聊了 ASP.NET Core 基于声明的访问控制到底是什么鬼? 今天我们乘胜追击:聊一聊ASP.NET Core 中的身份验证. 身份验证是确定用户身份的过程.授权是确定用户是否有 ...
- Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权
在上一讲中,我们已经完成了一个完整的案例,在这个案例中,我们可以通过Angular单页面应用(SPA)进行登录,然后通过后端的Ocelot API网关整合IdentityServer4完成身份认证.在 ...
- Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(二)
上文已经介绍了Identity Service的实现过程.今天我们继续,实现一个简单的Weather API和一个基于Ocelot的API网关. 回顾 <Angular SPA基于Ocelot ...
- Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(一)
好吧,这个题目我也想了很久,不知道如何用最简单的几个字来概括这篇文章,原本打算取名<Angular单页面应用基于Ocelot API网关与IdentityServer4+ASP.NET Iden ...
- 细说ASP.NET Forms身份认证
细说ASP.NET Forms身份认证 阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 ...
- Asp.Net MVC 身份验证-Forms
Asp.Net MVC 身份验证-Forms 在MVC中对于需要登录才可以访问的页面,只需要在对应的Controller或Action上添加特性[Authorize]就可以限制非登录用户访问该页面.那 ...
最新文章
- mapreduce编程实例(4)-求中位数和标准差
- [Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available
- 万豪数据泄漏门再敲警钟 酒店集团7步安全建议
- js中string字符串转换为JSON对象 - 方法大全(4种)
- tensorflow 读取cifar_对tensorflow中cifar-10文档的Read操作详解
- 阿里巴巴开源AI技术:强化学习在阿里的技术演进与业务创新
- 2009年4月21日 博客更新公告,敬请关注!
- 【牛客挑战赛38:E】七星阵(极角排序+dp+思维)
- ubuntu14.04 搭建 tftp 服务器
- 运筹学——表上作业法
- latex 分布符号_latex符号大全
- 应用密码学:协议、算法与C源程序(学习第一章)
- 游戏计算机中有缓冲内存吗,内存再大都不行!CPU缓存竟这么重要
- 虚拟模拟器可以用服务器,云服务器可以用什么模拟器
- 用分数表示循环小数(C#版)
- PyTorch-训练可视化
- 计算机excel表格教程高级筛选6,excel表格中的高级筛选要怎么操作?
- 360快传号,会成为下一个自媒体风口吗?
- IDEA导入scala详解
- vue项目每次打开显示的端口号都不一样
热门文章
- java中画图喷枪_JAVA 画图板实现(基本画图功能+界面UI)一、界面实现
- 【EtherCAT分析】三、EtherCAT从站设备描述文件设计
- 【JSTL】JSP 标准标签库JSTL学习
- 《Windows DOS界面(命令行界面)》
- 这台IPAD最适合程序员编程!!!
- el轮播图片image单张图比例缩放及多张图宽度固定高度等比例自适应展示;
- 数据结构算法 - 栈
- AutoSAR系列讲解(入门篇)4.1-BSW概述
- golang远程桌面服务器,go+govcl+go-ole实现的windows远程桌面
- 黑苹果 10G 网卡(intel Aquantia)解决方案及big sur 11.x 下驱动方式