.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 ...
随机推荐
- 前端学PHP之面向对象系列第四篇-----关键字
public public表示公有,它具有最大的访问权限,被定义为公有的类成员可以在任何地方被访问 如果属性用 var 定义,则被视为公有,如果方法没有设置关键字,则该方法默认为公有 <?php ...
- JAVA常量与变量
顺着箭头的转换为自动转换逆这箭头的转换为强制转换. 常量 关键字FINAL 命名为大写 标识符 1要以字母数字下划线和¥组成 2首字母不能为数字 3不能是JAVA的关键字和 保留字 4数据类型分为基本 ...
- 【linux】安装docker
硬件Centos6.9 x86_64 1.查看centos内核,uname -r 目前,CentOS 仅发行版本中的内核支持 Docker. Docker 运行在 CentOS 7 上,要求系统为64 ...
- 陷入了一个NGUI自适应的一个坑
自己对anchor的乱用.造成自己深陷anchor来搞自适应 耽误了太多的精力,最终也是回到正轨的途径 这期间浪费的太多精力了. 沉迷一件错误的事情过久 就 要果断的跳出 调整 . 但凡让自己觉得别扭 ...
- Ubuntu 14.10 下HBase错误集
1 如果机群时间不同步,那么启动子节点RegionServer就会出问题 aused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException ...
- Paramiko&堡垒机
Paramiko paramiko模块,基于SSH用于连接远程服务器并执行相关操作. 一.安装 pip install paramiko 二.使用 SSHClient 用于连接远程服务器并执行基本命令 ...
- nginx 操作笔记
测试nginx 配置是否成功 service nginx configtest
- 使用Softmax回归将神经网络输出转成概率分布
神经网络解决多分类问题最常用的方法是设置n个输出节点,其中n为类别的个数.对于每一个样例,神经网络可以得到一个n维数组作为输出结果.数组中的每一个维度(也就是每一个输出节点)对应一个类别,通过前向传播 ...
- Centos7.2/7.3集群安装Kubernetes 1.8.4 + Dashboard(转)
原文https://www.cnblogs.com/burningTheStar/p/7865998.html 1.环境配置 结点数量:3 结点系统:CentOS 7.2 / 7.3 2.效果展示 3 ...
- [UE4]圆形的动态材质,使用VectorParameter、Get Dynamic Material、Set Vector Parameter Value
一.新建一个名为M_FriendColor的材质.使用VectorParameter函数 二.新建一个名为FriendFlag的UserWidget,生成随机颜色,并传递给上一步设置的材质参数Colo ...