关于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 项 类型 ...
随机推荐
- UI自动化填写问卷(selenium)+定时任务(懒人必备)
1.自动填报 UI自动化 selenium 开发程序动机:天天有人催着填写问卷,弄的头大.主要还是懒的每天一个个去填写内容. 开发总时长:2个小时:学习+开发+修改 遇到的小问题: 在自动化填写地图的 ...
- vue 项目运行报错
'vue-cli-service' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 运行Vue项目文件的时候报如下错误 需要先用淘宝镜像来运行:cnpm install 然后运行成功后 就可以 ...
- 【工具】之001-CentOS7 最小化安装配置
写在前面 我很懒,,,不想敲一个命令一个命令敲... "偷懒是有前提的,不是之前,就是之后." 简述 CentOS 7 最小化安装版本:CentOS-7-x86_64-Minima ...
- 【lhyaaa】图的存储&遍历
呀,图真是一个令人头疼而又很重要的东西.在现实生活中,我们有很多的问题都不能用树来实现,所以烦人啊不伟大的图就出现了—— 图的存储 没有存储哪来的操作,所以存储是最基础的呢. 邻接矩阵 我们对于图的存 ...
- java_方法的定义、调用、重载
方法的定义 1 概述 方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能. 当我们需要这个功能的时候,就可以去调用.这样即实现了代码的复用性,也解决了代码冗余的现象. 2 ...
- Nginx配置SSL证书,提高网络安全性
首先区别Http与Https HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高 ...
- Linxu系统安装PHP详细教程
安装centos源 yum install epel-release –y 下载php安装压缩包 wget https://www.php.net/distributions/php-7.3.15.t ...
- JS学习第三天
运算符: 赋值运算符 “=” ,将“=”右边的值赋值给左边 比较运算符 “> < >= <= == != ===”, ==比较两边内容是否一致 ...
- C#LeetCode刷题之#747-至少是其他数字两倍的最大数( Largest Number At Least Twice of Others)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3746 访问. 在一个给定的数组nums中,总是存在一个最大元素 ...
- Java学习书籍与社区
编码规范:<阿里巴巴Java开发手册> 技术架构:<大型网站技术架构核心原理与案例分析>---李智慧 Spring架构与设计原理解析:<Spring技术内幕深入解析Spr ...