.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 ...
随机推荐
- Android 项目中的资源获取方法
Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...
- qt编程
http://www.zhihu.com/question/20054048 http://www.cnblogs.com/luoshupeng/archive/2011/05/01/2033743. ...
- github上传本地仓库
前提是你已经有了自己的github账号,并且已经关联了本地和远程的仓库,设置好了ssh密钥.自行百度解决. 上传的主要命令: git init git add . git commit -m &quo ...
- mongoVUE的增删改查操作使用说明(转)
mongoVUE连接数据库 http://jingyan.baidu.com/album/9989c7460fd171f648ecfe06.html?picindex=1 mongoVUE操作数据库 ...
- JGit与远程仓库链接使用的两种验证方式(ssh和https)
JGit是使用JAVA的API来操控Git仓库的库,由Eclipse公司维护.他提供的API分成两个层次,底层命令和高层命令.底层API是直接作用于低级的仓库对象,高层的API是一个面向普通用户级别功 ...
- 【SpringMVC】文件上传Expected MultipartHttpServletRequest: is a MultipartResolver错误解决
本文转载自:https://blog.csdn.net/lzgs_4/article/details/50465617 使用SpringMVC实现文件上传时,后台使用了 MultipartFile类, ...
- pandoc 基本使用
pandoc –s 输入文件.后缀 –o 输出文件.后缀
- centos7 下安装mysql 关键步骤
#wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz 5.7版本下 ...
- GIT命令行笔记
一次常规的初始化+推送: git initgit config user.email "you@example.com"git config user.name "asm ...
- C#语言时间
string x = "abcdefg"; 定义字符串 int length = x.Length; 定义长度 string y = x.Substring(1, 2); 意思的从 ...