ASP.NET Core 中如何通过 AuthorizeAttribute 做自定义验证?

咨询区

  • jltrem

我想在 ASP.NET Core 中用 authorization 特性实现一个自定义验证,在之前的版本中,我可以用系统提供的 bool AuthorizeCore(HttpContextBase httpContext) 方法,但在这个版本中已经没有该方法了。

请问当前我该如何实现这个自定义的 AuthorizeAttribute 呢?

回答区

  • gius

看样子你用的是 ASP.NET Core 2,当然现在你也可以实现,继承 AuthorizeAttribute 并实现 IAuthorizationFilter 接口即可,参考代码如下:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class CustomAuthorizeAttribute : AuthorizeAttribute, IAuthorizationFilter
{private readonly string _someFilterParameter;public CustomAuthorizeAttribute(string someFilterParameter){_someFilterParameter = someFilterParameter;}public void OnAuthorization(AuthorizationFilterContext context){var user = context.HttpContext.User;if (!user.Identity.IsAuthenticated){// it isn't needed to set unauthorized result // as the base class already requires the user to be authenticated// this also makes redirect to a login page work properly// context.Result = new UnauthorizedResult();return;}// you can also use registered servicesvar someService = context.HttpContext.RequestServices.GetService<ISomeService>();var isAuthorized = someService.IsUserAuthorized(user.Identity.Name, _someFilterParameter);if (!isAuthorized){context.Result = new StatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);return;}}
}
  • Kévin Chalet

对于纯碎的授权,比如说只能给某些用户一些特定的访问权限,现在推荐的做法是使用新的授权块。

public class Startup
{public void ConfigureServices(IServiceCollection services){services.Configure<AuthorizationOptions>(options =>{options.AddPolicy("ManageStore", policy => policy.RequireClaim("Action", "ManageStore"));});}
}public class StoreController : Controller
{[Authorize(Policy = "ManageStore"), HttpGet]public async Task<IActionResult> Manage() { ... }
}

对于授权,最好在中间件层面做处理,回过头来说,你确定现在的做法是正确的吗?

点评区

确实在 ASP.NET Core 5 时代,更好的方式应该是用 中间件 实现,而不是深入到业务体之后再用过滤器的方式来实现,当然你也可以用过滤器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python从random生成列表_详解Python利用random生成一个列表内的随机数

详解Python利用random生成一个列表内的随机数首先,需要导入random模块:import random随机取1-33之间的1个随机数&#xff0c;可能重复:random.choice(range(1,34))print得到一系列随机数,执行一次得到一个随机数:print(random.choice(range(1,34)))随机取1-33之间的6个随机数&a…

DataSet与Xml之间的转换

DataSet转化为Xml&#xff0c;Xml转化为DataSet&#xff0c;Ado.net中使用方法DataSet.WriteXml()和DataSet.ReadXml()&#xff0c;由于有多个重载方法&#xff0c;所以这里有多条路径可以实现&#xff0c;可谓条条大道通罗马。这里我就把所有的用法来尝试下&#xff0c;希望给…

和套套一样,一次性橡胶手套制作现场, 这鬼畜的画风

全世界只有3.14 % 的人关注了爆炸吧知识来源&#xff1a;普象工业设计小站ID&#xff1a;iamdesign如果说套套的制作过程很羞羞那同为乳胶制品的乳胶手套制作过程则可以用魔性甚至惊悚来说走进乳胶手套制作的工厂里迎面而来的是数不清的白色之手不停地在转啊转、甩啊甩这画面不…

Installing OpenCV 2.3.1 in Ubuntu

step1&#xff1a;下载 从http://sourceforge.net/projects/opencvlibrary 下载OpenCV源码&#xff0c;下载文件为OpenCV-2.3.1a.tar.bz2。 cd ~ wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.1/OpenCV-2.3.1a.tar.bz2/download step2&#xff1a;…

Magicodes.IE 2.5.6.1发布

2.5.6.12021.10.06修复 #337&#xff0c;bool?类型导出的映射问题2.5.6.02021.10.05合并Magicodes.EPPlus到Magicodes.IE&#xff0c;修复所有单元测试并修复部分Bug对EPPlus进行了部分性能优化&#xff08;比如使用高性能内存流代替MemoryStream&#xff09;和功能加强2.5.5.…

OpenSSL--Window生成证书实战

为什么80%的码农都做不了架构师&#xff1f;>>> Windows下使用OpenSSL生成自签证书&#xff08;亲测&#xff09; 一&#xff0c;前言 经常写博客的小伙伴儿都知道&#xff0c;大家一般在前言里面会提到为什么写这篇博客&#xff0c;而我这篇博客 主要是探讨OpenSS…

python绘制反比例函数_描点法画反比例函数图像的动态演示——数学软件GeoGebra制作教程...

Gif动态图又又又上传不成功了&#xff0c;建议跳转链接查看全文&#xff1a;描点法画反比例函数图像的动态演示--数学软件GeoGebra制作教程​www.toutiao.com关于描点法画函数图像&#xff0c;前面已有三篇&#xff0c;包括以一次函数为例的&#xff1a;有老师说&#xff0c;希…

制作巴士电台彩蛋一枚

内容暂不透露哈&#xff0c;自己摸索&#xff0c;假如玩过魂斗罗&#xff0c;或知道google reader的彩蛋的话&#xff0c;那么巴士的彩蛋你应该也能试出来&#xff0c;哈哈 纯粹为增加点欢乐感~~

hadoop 2.7 java_Hadoop2.7环境搭建---Java环境变量

感谢分享&#xff1a;https://my.oschina.net/fhd/blog/335156一般来说&#xff0c;我们都会把Java安装到 /usr/local 目录 或者 /opt 目录下。这里假设java安装包已解压在了 /opt下&#xff0c;具体目录为&#xff1a;/opt/java8/java1.8.0_45目录(注意&#xff1a;如果是生产…

7年赚的2个亿,数学家6年就花光了,全砸在自家的房子上

全世界只有3.14 % 的人关注了爆炸吧知识提到数学家&#xff0c;我以为是这样的&#xff1a;发际线不低&#xff0c;面部表情匮乏&#xff0c;总爱是写外星符号。然而却是这样的&#xff0c;刚刚还在讲sin、cos,一转头就掏出一把小提琴&#xff0c;超高难度的帕格尼尼随想曲说来…

wp7开发官方教程和开发包

http://msdn.microsoft.com/zh-cn/windowsphone/gg675037.aspx转载于:https://www.cnblogs.com/kkcontrol/archive/2012/03/30/2425781.html

iOS-Runtime知识点整理

本文目录 1.Runtime简介2.Runtime相关的头文件3.技术点和应用场景 3_1.获取属性\成员变量列表3_2.交换方法实现3_3.类\对象的关联对象,假属性3_4.动态添加方法&#xff0c;拦截未实现的方法3_5.动态创建一个类4.面试题-1.Runtime简介回到顶部1.Runtime简介 因为Objc是一门动态语…

人人年薪百万?醒醒!

今天刷知乎&#xff0c;看见一个很有趣的帖子&#xff1a;中青校媒的一份调查结果显示&#xff1a;67.65%的大学生评估自己10年内会年薪百万。这个帖子下面一堆答主在那疯狂的讽刺挖苦&#xff0c;觉得年轻人什么都不懂就会幻想。我倒是觉得年轻人对未来充满憧憬和希望反而是好…

sql not exists用法_SQL Server 2012 高级用法(一)

最近用到了SQL Server 相关数据库等问题&#xff0c;于是整理了如下SQL Server高级用法系列。该系列不再介绍基础用法(select ,insert, update, delete, and or ,order by 等)。本文将介绍高级用法&#xff1a;Top, Like,通配符。三种高级用法。TOP Top 子句用于规定要返回的记…

HTTP 缓存介绍

HTTP 缓存介绍2种方式来提升你的web 应用程序的速度&#xff1a; 1、减少请求和响应的往返次数2、减少请求和响应的往返字节大小 HTTP缓存是最好的减少客户端服务器端往返次数的办法。缓存提供了提供一种机制来保证客户端 或者代理能够存储一些东西&#xff0c;而这些东西将会在…

json 查询 java_怎样在java中查询mysql得到如下的json格式的结果?

设唯一标识用户的是idString jsonString "{";preparedStatement connection.prepareStatement("select name,url,page from table_a where id 1 limit 1");ResultSet rs preparedStatement.executeQuery();rs.first();String name rs.getString(1);St…

谈谈女友卸妆后的感受?

1 2 医生和她的实习助手3 那个&#xff0c;打针的话能不能轻点呀4 ok&#xff0c;学会了 图自青鲤5 有点甜~6 一个人可以无聊到什么程度&#xff1f;7 所谓的前翻乾坤无敌轮回抓鱼大法。。8 《请回答1988》中的珍珠饰演者金雪演唱插曲《惠化洞》&#xff08;来源于weibo&#x…

隐藏无线网络技巧

无线信号一搜即到&#xff0c;无线网络一连即上&#xff0c;这是很多安全隐患的根源&#xff0c;没有一定的保护措施&#xff0c;无线网络犹如毫无遮挡在市井裸奔&#xff0c;所以在无线网络中隐藏电脑和无线路由器非常重要。想深度潜水&#xff0c;请看无线网络隐藏技巧。 要在…

隐形材料你见过吗?

1 提前锻炼&#xff0c;为春运做准备2 隐形的聚合物3 黄山西海地轨电车好像驶入了画中.....4 大猪蹄子&#xff0c;就是喜欢年轻的5 现在的小学生太会了吧&#xff01;6 当狗穿上了鞋&#xff0c;脚就不是自己的脚了~7 你仿佛在说我是王八&#xff1f;&#xff1f;&#xff1f;…

正则笔记

今天有个需求是 [无限个字符除了中文][无限个字符除了中文][无限个字符除了中文] 于是我写了个 ^[[][^u4e00-u9fa5]*[]][-*/%][[][^u4e00-u9fa5]*[]][-*/%][[][^u4e00-u9fa5]*[]]$ 报错 invalid range in character class 先不说语法问题&#xff0c;光是这一大坨玩意就让…