关于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 项 类型 ...
随机推荐
- jenkins集成spring boot持续化构建代码
我个人使用的是阿里云的云服务器,项目采用的是spring boot为框架,现在要做的功能就是将本地开发的代码提交到github中,通过jenkins自动化集成部署到云服务器.接下来开始步骤. 1 首先 ...
- 07 CentOS简单命令与XShell简单使用
关机 poweroff 重启 init 6 查看ip地址 ifconfig 查看当前目录下的文件与目录 ls ll 判断命令是内部还是外部的类型 type ifconfig 通过file /sbin/ ...
- C#设计模式之23-访问者模式
访问者模式(Vistor Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/431 访问. 访问者模式属于 ...
- 集中式版本管理系统 SVN使用
SVN的使用 SVN的文件状态 黑色:正常的文件 黄色文件(在Android Stduio中颜色):被忽略的文件 红色:文件没有Add的新文件(没有加入版本控制subversion中) 绿色:新文件A ...
- 手写AOP实现过程
一.手写Aop前基础知识 1.aop是什么? 面向切面编程(AOP):是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行OOP开发时,都是基于对组件(比如类)进行开 ...
- XXE漏洞学习笔记
XXE 参考文章 名称 地址 一篇文章带你深入理解漏洞之 XXE 漏洞 https://xz.aliyun.com/t/3357 Web Hacking 101 https://wizardforce ...
- 你们要的MyCat实现MySQL分库分表来了
❝ 借助MyCat来实现MySQL的分库分表落地,没有实现过的,或者没了解过的可以看看 ❞ 前言 在之前写过一篇关于mysql分库分表的文章,那篇文章只是给大家提供了一个思路,但是回复下面有很多说是细 ...
- 反制面试官 | 14张原理图 | 再也不怕被问 volatile!
反制面试官 | 14张原理图 | 再也不怕被问 volatile! 悟空 爱学习的程序猿,自主开发了Java学习平台.PMP刷题小程序.目前主修Java.多线程.SpringBoot.SpringCl ...
- Android studio 运行程序出现两个apk的解决方案
保留主项目中的 intent-filter,将其他module中 AndroidManifest.xml文件的intent-filter的内容删除掉即可. 感恩:https://blog.csdn.n ...
- linux下使用vim创建编辑文件
vi/vim 使用实例 如果要想用vim/vi创建一个文件(使用命令): vim test.txt 不管文件存在与否 直接输入 vi 文件名 就能够进入 vi 的一般模式 按下 i 进入输入模式( ...