100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > ASP.NET MVC身份认证与授权

ASP.NET MVC身份认证与授权

时间:2022-10-17 07:41:18

相关推荐

ASP.NET MVC身份认证与授权

文章目录

一、引言1.身份认证的含义2.身份认证与Session基于Session保存用户状态不足之处 二、身份验证Forms验证FormsAuthentication类 验证案例1.Forms验证案例2.使用User对象检查用户是否已验证3.修改根目录中Web.config配置文件4.用户注销 四、身份授权Authorize特性实现授权Authorize特性注意Authorize实现高级授权案例

一、引言

1.身份认证的含义

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

2.身份认证与Session

基于Session保存用户状态

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

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

不足之处

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

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

二、身份验证

Forms验证

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

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

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

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

FormsAuthentication类

验证案例

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();}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。