关于ASP.NET MVC的权限认证的一些总结
最近在学ASP.NET MVC的权限认证的一些东西,上网搜索了一阵,发现网上的方法大多数是以下几类:
一、FormsAuthentication.SetAuthCookie(admin.Name, false)或者是FormsAuthenticationTicket
感受:感觉FormsAuthentication.SetAuthCookie这种方法重在检查是否有用户登录等,需要检查权限时,要调用this.User.Identity.IsAuthenticated方法来检查是否授权等,每次要检查权限时,都要进行权限检查,这类检查对于asp页面挺适用的,但是也挺麻烦的,还要配合web.config使用,我在网上看视频讲到这一块时,就觉得挺麻烦的,然后他又讲了可以用[Authorize]特性来代替这种麻烦的写法,于是我也尝试这样做,奇怪的是我直接加[Authorize]属性的时候,就算我登录了,它也是直接给我过滤掉了,并且是回到了Account/Login.aspx页面,这是我开始最不能理解的地方,因为我在web.config文件中配置了出错应该回到Home/Index.aspx页面啊,后来我想起MVC5中微软给带的自己的一套登录页面,并且在App_Start.cs文件夹Startup.Auth.cs文件中就将 LoginPath = new PathString("/Account/Login")给规定了,于是我将其改为自己的页面LoginPath = new PathString("/Home/Index"),虽然验证还是不同过,但是已经可以跳转回我自己的页面了,我就想是不是这个Startup.Auth.cs的设置比web.config文件中的设置高呢?我故意将web.config中验证权限不通过时地址与Startup.Auth.cs文件中设置的跳转地址不一致,但是运行我发现当权限不通过时,程序执行的依然是Startup.Auth.cs文件中的配置,我仔细查看了一下web.config文件,发现
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
<remove name="ApplicationInsightsWebTracking" />
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" />
</modules>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
有这么一句,这意思是将配置文件中的Form验证给删除了吗?我将词句删除,然后重新尝试,发现程序执行了web.config文件配置的跳转信息。
验证不通过时跳转问题解决了,那么我直接放上去权限认证[authorize]属性运行程序,发现我明明已经登陆了,可执行该方法时,还是给我跳转回了登录页面,我又仔细看了一下这个[authorize]属性,发现它也是检查cookie信息的,想要让它有值必须得在验证前,使用FormsAuthentication.SetAuthCookie(admin.Name, false)或者是FormsAuthenticationTicket对cookie进行设置保存才行,然后看视频源代码中做到这一步已经可以正常运行了,我的还得在web.config中添加
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="1"/>
</authentication>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
至于为什么,我以后再研究研究。
网上说FormsAuthenticationTicket可以对角色权限进行验证,我看了几篇帖子,写的都比较详细,抽机会得好好用用。
http://www.cnblogs.com/zhwl/archive/2011/02/23/1961924.html
http://www.cnblogs.com/colder/p/4544031.html
二、是重写继承于类AuthorizeAttribute的OnAuthorization和AuthorizeCore方法
三、重写AuthorizeCore和其对应的HandleUnauthorizedRequest方法的
感受:之前感觉直接在OnAuthorization中验证权限也可以啊,为什么非要在AuthorizeCore验证权限呢,在研究了一番之后感觉两者还是有分工的,执行OnAuthorization方法时,执行base.OnAuthorization(filterContext)这一句时,会调用AuthorizeCore,所以大概明白了,AuthorizeCore就是用来验证角色权限的,而OnAuthorization就是来处理权限验证逻辑的,比如通过验证怎么样, 不通过验证怎么样等等。但是又有一种说法是HandleUnauthorizedRequest方法才是处理OnAuthorizeCore中权限不通过的处理方法的啊,那么究竟是怎么样的呢,容我仔细研究一下再来!
http://www.cnblogs.com/wangjq/archive/2011/03/08/1977092.html
http://www.cnblogs.com/jyan/archive/2012/07/24/2606646.html:该文中写的好像很明确OnAuthorization方法是从数据库或者xml中获取用户角色信息的,然后交由AuthorizeCore进行角色权限判断,然后根据判断结果返回一个HttpUnauthorizedResult对象,然后由HandleUnauthorizedRequest方法去处理未通过认证的用户的跳转路由。
http://www.cnblogs.com/yushuo/p/4538031.html
四、重写OnActionExecuting
OnActionExecuting方法继承自ActionFilterAttribute,但ActionFilterAttribute和AuthorizeAttribute都继承自FilterAttribute。
如果用OnActionExecuting也写一个属性与AuthorizeAttribute重写的属性用在同一个action上,经过验证是AuthorizeAttribute先起作用,如果AuthorizeAttribute,AuthorizeCore,HandleUnauthorizedRequest都没有处理的话,OnActionExecuting重写的方法就起作用了。
后记:关于第二种和第三种方法,搞得也是迷迷糊糊,还有几种方法的参数各种上下文对象,AuthorizationContext,HttpContextBase,ActionExecutingContext让我看的一脸懵逼,找时间还得研究研究,毕竟纸上得来终觉浅,须知此事要躬行啊!
关于ASP.NET MVC的权限认证的一些总结的更多相关文章
- ASP.NET MVC 微信JS-SDK认证
layout: post title: ASP.NET MVC 微信JS-SDK认证 category: .net date: 2016-11-01 00:00:00 tags: .net javas ...
- ASP.NET MVC通用权限管理系统(响应布局)源码更新介绍
一.asp.net mvc 通用权限管理系统(响应布局)源码主要以下特点: AngelRM(Asp.net MVC)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash ...
- asp.net mvc 全局权限过滤器及继成权限方法
全局权限过滤器 //----------------------------------------------------------------------- // <copyright f ...
- ASP.NET MVC实现权限控制
这篇分享一下 ASP.NET MVC权限控制.也就是说某一用户登录之后,某一个用户是否有权限访问Controller,Action(操作),视图等 想实现这些功能,需要在数据库创建好几个表:[User ...
- (转)Asp.Net MVC中身份认证和授权
MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供了三种方式,其中最常用的就是我们的Form认证,需要配置相应的信息.例如下面的配置信息: < ...
- ASP.NET MVC +EasyUI 权限设计(二)环境搭建
请注明转载地址:http://www.cnblogs.com/arhat 今天突然发现博客园出问题了,老魏使用了PC,手机,平板都访问博客园了,都是不能正常的访问,原因是不能加载CSS,也就是不能访问 ...
- ASP.NET MVC +EasyUI 权限设计(一)开篇
在前一段时间中,老魏的确非常的忙碌,Blog基本上没有更新了,非常的抱歉,那么在后面的时间中,老魏会尽量的抽时间来写的,可能时间上就不太富裕了.今天开始呢,老魏会和大家分享一下关于权限设计的有关文章, ...
- 【转】ASP.NET MVC实现权限控制
这篇分享一下 ASP.NET MVC权限控制.也就是说某一用户登录之后,某一个用户是否有权限访问Controller,Action(操作),视图等 想实现这些功能,需要在数据库创建好几个表:[User ...
- asp.net mvc的权限管理设计
现在集中展示用户-角色-权限管理的功能,因此,所有数据表一律简化处理. 1 后台管理效果 (1)角色管理 (2)权限管理 2 数据库设计(MSSQL) (1)用户表dbo.Users 项 类型 ...
随机推荐
- 【av68676164(p21-p22)】线程
4.3.1 线程概念 线程的概念(Thread) 线程是可由CPU直接运行的实体 一个进程可以创建多个线程 多个线程可共享CPU可以实现并发运行 CreateThread() 功能:把一个函数创建为一 ...
- C#设计模式之16-迭代器模式
迭代器模式(Iterator Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/417 访问. 迭代器模式 ...
- Azure认知服务之表格识别器
认知服务 Azure 认知服务的目标是帮助开发人员创建可以看.听.说.理解甚至开始推理的应用程序. Azure 认知服务中的服务目录可分为五大主要支柱类别:视觉.语音.语言.Web 搜索和决策.开发人 ...
- Deep learning-based personality recognition from text posts of online social networks 阅读笔记
文章目录 一.摘要 二.模型过程 1.文本预处理 1.1 文本切分 1.2 文本统一 2. 基于统计的特征提取 2.1 提取特殊的语言统计特征 2.2 提取基于字典的语言特征 3. 基于深度学习的文本 ...
- C#图解教程(第四版)—02—类的基本概念
类 是一种能 存储数据 并且 执行代码 的数据结构,他包含数据成员和函数成员 .成员可以是9种可能的成员类型的任意组合 字段 属性 方法 常量 构造函数 析构函数 运算符 索引器 事件 1 字 ...
- Golang 解析Yaml格式
Golang官方并没有提供Yaml解析包,所以需要使用第三方包.可用的第三方包有不少,这里选择的是 gopkg.in/yaml.v2,这个包在github上有不少的star,也的确挺好用.其使用的是A ...
- YAML简要入门
这是一篇简单的YAML入门教程,目的是让你知晓什么YAML,以及YAML的基础语法.方便接下来学习如何使用Golang解析YAML.如果想获得更多YAML的知识,请查看http://yaml.org ...
- LeetCode 到底怎么刷?GitHub 上多位大厂程序员亲测的高效刷题方式
作者:HelloGitHub-小鱼干 在众多的诸如阿里.腾讯等大厂之中,最看中面试者刷题技能的大概要数有"链表厂"之称的字节跳动了.作为一个新晋大厂,字节跳动以高薪.技术大佬云集吸 ...
- Java多线程_缓存对齐
1.什么是缓存对齐 当前的电脑中,数据存储在磁盘上,可以断电保存,但是读取效率较低.不断电的情况下,数据可以在内存中存储,相对硬盘效率差不多是磁盘的一万倍左右.但是运算时,速度最快的是直接缓存在CPU ...
- JavaScript学习系列博客_26_JavaScript 数组的一些方法
数组的一些方法 - push() - 用来向数组的末尾添加一个或多个元素,并返回数组新的长度 - 语法:数组.push(元素1,元素2,元素N) - pop() - 用来删除数组的最后一个元素,并返回 ...