.Net MVC 身份验证
.Net身份验证主要是分为三种 Windows | Forms | Passport ,其中Froms在项目中用的最多。
1、Windows身份验证
2、Froms验证
简单的身份验证
Forms 验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端。
服务端上的授权设置就可以根据不同目录对不同用户的访问授权进行控制了。
要验证身份需要在 Web.xml进行配置
<authentication mode="Forms">
<forms defaultUrl="~/Home/Index" loginUrl="~/Account/Index" timeout="30"></forms>
</authentication>
loginUrl:在没有通过身份验证的情况下,跳转到的登录页面
defaultUrl:通过身份验证以后,在没有指向页的时候跳到的页面
timeout:超时时间(分钟)
[AllowAnonymous]
public class AccountController : BaseController
{
/// <summary>
/// 简单的Forms登录
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public ActionResult Login(Entity.T_UserModel model)
{
if (ModelState.IsValid)
{
//写入cookie票据
FormsAuthentication.SetAuthCookie(model.Account, false);
return Redirect(FormsAuthentication.DefaultUrl);
}
return View("Index");
} /// <summary>
/// 退出登录
/// </summary>
/// <returns></returns>
public ActionResult SignOut()
{
FormsAuthentication.SignOut();
return View();
}
<forms>标签中的loginUrl指定如果没有找到任何有效的身份验证 Cookie,为登录将请求重定向到的 URL。默认值为 default.aspx。loginUrl指定的页面就是用来验证用户身份的,一般此页面提供用户输入用户名和密码,
用户提交后由程序来根据自己的需要来验证用户的合法性(大多情况是将用户输入信息同数据库中的用户表进行比较),如果验证用户有效,则生成同此用户对应的身份验证票,写到客户端的Cookie,最后将浏览器重定向到用户初
试请求的页面.一般是用FormsAuthentication.RedirectFromLoginPage 方法来完成生成身份验证票,写回客户端,浏览器重定向等一系列的动作.
上面的 Login() 方法实现了用户登录,
在需要通过权限验证的控制器添加 [Authorize] 过滤器,当没有经过授权的用户请求URL的时候会产生拦截,并重定向到 配置文件节点<Authentication />节点指向 loginUrl 登录页面,
[AllowAnonymous] ()过滤器添加在 登录Controller,否则将无法跳转到登录方法。
1、登录:调用 FormsAuthentication.SetAuthCookie( );
2、注销:调用 FormsAuthentication.SignOut();
保护受限制的文件或页面
在咱们的网站里,有的文件或者页面可能会允许所有的用户访问,有的可能需要经过授权的用户访问,有的可能只能特定角色的用户才能访问。这些页面或者文件受到限制(默认情况下只针对ASP相关的文件起作用,js 和HTML不起作用,需要单独设置),
为了保护这些有着权限要求的页面,.Net 提供了设置的方式:
1、<Allow />允许的意思,<deny>拒绝的意思
2、(*) 代表所有用户,(?) 代表匿名用户 (未授权)
3、使用 users 属性时,多个值逗号分隔开。使用 roles 属性时,多个值用逗号分隔开。
4、如果某个资源只允许某类用户访问,那么最后的一条规则一定是 <deny users="*"/> ,<deny>一定写在后面!
必须经过授权以后才能访问 ,匿名用户不能访问
<location path="test.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
只能在admin,test这两个用户中,登录的用户才能访问
<location path="test.aspx">
<system.web>
<authorization>
<allow users="admin,test"/>
<deny users="?"/>
</authorization>
</system.web>
</location>
在拥有admin角色中登录的用户才能访问,其余用户都不能访问
<location path="test.aspx">
<system.web>
<authorization>
<allow roles="admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
角色验证后台设置:
/// <summary>
/// 简单的Forms登录
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public ActionResult Login(Entity.T_UserModel model)
{
if (ModelState.IsValid)
{
//创建票据
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket
( , //version: 票证的版本号
model.Account, //name :与票证关联的用户名。
DateTime.Now, //
DateTime.Now.AddMinutes(), //本地日期和票证的到期的时间
true, //是否生成持久性cookie
"admin,test", //要存储在票证的特定于用户的数据。理解为角色
"/" //cookie路径
);
//加密票据,创建cookie
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
cookie.HttpOnly = true;
HttpContext.Response.Cookies.Add(cookie); return RedirectToAction("Index", "Home", new { });
}
return View("Index");
} /// <summary>
/// 自定义 IHttpModule
/// </summary>
public class AuthenticateHttpModule : IHttpModule
{
public void Dispose() { } public void Init(HttpApplication context)
{
context.AuthenticateRequest += new EventHandler(AuthenticateRequest);
}
private void AuthenticateRequest(object sender, EventArgs e)
{ HttpApplication app = (HttpApplication)sender;
HttpContext ctx = app.Context; //获取本次Http请求的HttpContext对象
if (ctx.User != null)
{
if (ctx.Request.IsAuthenticated == true) //验证过的一般用户才能进行角色验证
{
FormsIdentity fi = (System.Web.Security.FormsIdentity)ctx.User.Identity;
FormsAuthenticationTicket ticket = fi.Ticket; //取得身份验证票
string userData = ticket.UserData; //从UserData中恢复role信息
string[] roles = userData.Split(','); //将角色数据转成字符串数组,得到相关的角色信息
ctx.User = new GenericPrincipal(fi, roles); //这样当前用户就拥有角色信息了
}
}
}
}
Action加角色和用户验证
/// <summary>
/// Action加角色和用户验证
/// </summary>
/// <returns></returns>
[Authorize(Roles =("admin,test"),Users ="wwj")]
public ActionResult Index()
{
return View();
}
注册 自定义 IHttpModule
<!--添加自定义 AuthenticateHttpModule type="命名空间.类名" -->
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<add name="AuthenticateHttpModule" type="Web.App_Code.AuthenticateHttpModule"/>
</modules>
</system.webServer>
点击下载Demo
3、Passport 验证
的萨达速度
.Net MVC 身份验证的更多相关文章
- Asp.Net MVC 身份验证-Forms
Asp.Net MVC 身份验证-Forms 在MVC中对于需要登录才可以访问的页面,只需要在对应的Controller或Action上添加特性[Authorize]就可以限制非登录用户访问该页面.那 ...
- MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框
1.MVC身份验证. 有两种方式.一个是传统的所有控制器继承自定义Control,然后再里面用MVC的过滤器拦截.所以每次网站的后台被访问时.就会先走入拦截器.进行前端和后端的验证 一个是利用(MVC ...
- Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码
本问主要介绍asp.net的身份验证机制及asp.net MVC拦截器在项目中的运用.现在让我们来模拟一个简单的流程:用户登录>权限验证>异常处理 1.用户登录 验证用户是否登录成功步骤直 ...
- MVC - 身份验证
FormsAuthenticationTicket 使用此类来为用户生成一个身份票据 持有该票据则说明该用户是通过了身份验证的用户 可以随时访问某些资源 我们先创建几个类 //用户 public c ...
- MVC身份验证及权限管理
MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供了三种方式,其中最常用的就是我们的Form认证,需要配置相应的信息.例如下面的配置信息: < ...
- MVC身份验证及权限管理(转载)
from https://www.cnblogs.com/asks/p/4372783.html MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供 ...
- (转) MVC身份验证及权限管理-2
转自:http://www.cnblogs.com/ldp615/archive/2010/10/27/asp-net-mvc-forms-authentication-roles-authoriza ...
- jwt的ASP.NET MVC 身份验证
Json Web Token(jwt) 一种不错的身份验证及授权方案,与 Session 相反,Jwt 将用户信息存放在 Token 的 payload 字段保存在客户端,通过 RSA 加密 ...
- MVC 身份验证和异常处理过滤器
:在Global中注册为全局过滤器,应用于所有的Controller的Action 参数类均继承自ControllerContext,主要包含属性请求上下文.路由数据.结果 using FilterE ...
随机推荐
- 黄聪:超实用的PHPExcel[导入][导出]实现方法总结
首先需要去官网https://github.com/PHPOffice/PHPExcel/下载PHPExcel,下载后只需要Classes目录下的文件即可. 1.PHPExcel导出方法实现过程 /* ...
- pytest.11.生成xml格式的测试报告
From: http://www.testclass.net/pytest/report/ pytest有非常友好的命令行报告输出,在做用例开发的时候,这是极好的.然而我们在运行用例后经常会需要将测试 ...
- 基于单片机的Wifi温度湿度测量仪
这次的制作背景是由于单片机课程实训课程要求 刚好手上有块ESP8266-12F的WiFi模块 于是就选择了制作一个基于单片机,使用WiFi传输数据的温湿度采集测量仪 制作过程: 由于有使用过WiFi模 ...
- 函数节流和防抖(todo)
一.什么是函数节流和函数防抖 函数节流和函数防抖目的都是避免同时多次执行函数. 函数防抖是将多次执行变成一次执行,函数节流是将多次执行变成每隔一定时间执行一次. 二.具体实现 三.什么时候需要节流,什 ...
- Java学习——加法器
package cys; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.aw ...
- [UE4]多播(广播)
只有服务器才有权限做广播,所以要判断确保是服务器端才做广播,有以下几种方法: 一.使用“Switch Has Authority”判断是否在服务器端 因为character一定是在服务器端创建出来的, ...
- [UE4]AIPerception,AI感知
- 理解HDFS高可用性架构
在Hadoop1.x版本的时候,Namenode存在着单点失效的问题.如果namenode失效了,那么所有的基于HDFS的客户端——包括MapReduce作业均无法读,写或列文件,因为namenode ...
- Linux常用指令之一
1.基础命令 ls --查看当前目录下的文件 cd --切换目录或者直接回到home目录 cd - --切换最近使用的两次目录 cd .. --切换到上一级目录 pwd ...
- Linux使用NFS服务实现远程共享
首先安装 apt install -y nfs-kernel-server nfs-common 编辑配置文件 vim /etc/exports 添加内容: /root/test *(rw,sync, ...