NET问答: 如何集中化统一验证 Authorization
咨询区
Felipe Deveza:
我自己实现了一个 basic 验证,现在我的做法是在每一个 Action 中都提取 Request.Headers["Authorization"]
进行权限验证。
[HttpGet]
public IActionResult Get()
{string token = Request.Headers["Authorization"];// Validate token.
}[HttpPost]
public IActionResult Post(int id)
{string token = Request.Headers["Authorization"];// Validate token.
}
请问我是否可以在某一个集中地方做 Request.Headers["Authorization"]
的全局验证呢?
回答区
miechooy:
你可以通过自定义中间件的方式对 header
进行统一验证,然后决定是否传给后端的的 Controller。
中间件的逻辑大概如下:
public class YourMidllewareClass{public async Task Invoke(HttpContext context){string token = context.Request.Headers["Authorization"];//do the checkingif (token == null){context.Response.StatusCode = 401;await context.Response.WriteAsync("Access denied!");return;}//pass request further if correctawait _next(context);}}
有了中间件之后,接下来通过 IApplicationBuilder 将其注入到Http请求管道中,参考如下代码:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IConnectionManager conn, ILoggerFactory loggerFactory)
{app.UseMiddleware<YourMidllewareClass>();
}
Matheus Lacerda:
在 ASP.NET Core 中,你可以使用内置的 AuthenticationHandler 类,详细文档请参考:https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x 。
刚好我的项目中有一个自定义验证
功能。
Startup.ConfigureServices:
services.AddAuthentication(options =>{options.DefaultAuthenticateScheme = "Custom Scheme";options.DefaultChallengeScheme = "Custom Scheme";}).AddCustomAuth(o => { });
Startup.Configure:
app.UseAuthentication();
finally
internal class CustomAuthenticationHandler : AuthenticationHandler<CustomAuthenticationOptions>
{public CustomAuthenticationHandler(IOptionsMonitor<CustomAuthenticationOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock){}protected override async Task<AuthenticateResult> HandleAuthenticateAsync(){try{// Your auth code here// Followed by something like this:return AuthenticateResult.Success(new AuthenticationTicket(new ClaimsPrincipal(new ClaimsIdentity(new List<Claim>() { new Claim(ClaimTypes.Sid, Id.ToString()) },Scheme.Name)),Scheme.Name));} catch{return AuthenticateResult.Fail("Error message.");}}
}
这样配置之后,所有对Controller的请求都会先经过 authentication ,如果某些 Controller 有特殊需求,可以使用 [AllowAnonymous]
忽略它。
点评区
说实话在.netcore 时代实现这种统一验证的需求不要太简单了,中间件这块也是大家必须理解的基础知识。
NET问答: 如何集中化统一验证 Authorization相关推荐
- Bumblebee微服务网关之请求统一验证
对于微服务网关来说,统一请求验证是一个比较重要和常用的功能,通过网关验证后台服务就无须关注请求验证:对于多语言平台的服务而言制定验证方式和变更验证配置都是一件比较繁琐和工作量大的事情.Bumblebe ...
- .NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.案例结构总览 这里,假设我们有两个客户端(一个Web网站,一个移动App),他们要使用系统,需要通过API网关(这里API网关始终作为 ...
- MVC中的统一验证机制~续
前段时间我发表的关于MVC架构中对验证方式的设计,收到了不少朋友的留言,意思是说过于复杂,复用性不高,当然我的出发点是减少实体部门的代码量. 最近在朋友的建议下,看了另一种验证方式,事实上就是MVC实 ...
- Unicorn - W3C 统一验证工具
近日,W3C发布了Unicorn:帮助改进网页质量的一站式工具.Unicorn由4个流行的工具组合而成(包括Markup验证器.CSS验证器.mobileOk检查器及Feed验证器)并提供了一个统一的 ...
- Vue3表单验证 单个验证 统一验证 自定验证
单个验证 统一验证 自定验证 注意:prop为当前字段的name值,必填 1.加入ref="ruleFormRef" :rules="rules" 2.写pro ...
- SpringCloud系列教程(五)之SpringCloud Gateway 网关聚合开发文档 swagger knife4j 和登录权限统一验证【Hoxton版】
阅读提醒: 本文面向的是有一定springboot基础者 本次教程使用的Spring Cloud Hoxton RELEASE版本 由于knife4j比swagger更加友好,所以本文集成knife4 ...
- 电子科大(申恒涛团队)京东AI(梅涛团队)提出用于视频问答的结构化双流注意网络,性能SOTA!优于基于双视频表示的方法!...
本文分享论文『Structured Two-stream Attention Network for Video Question Answering』,由电子科大(申恒涛团队)&京东AI(梅 ...
- 基于SpringAop 的统一验证
2019独角兽企业重金招聘Python工程师标准>>> 背景 在我们的项目实际开发中,由于使用dubbo框架,项目的所有的接口都是按照一定的规范来开发的,项目接口层的接口如下: 系统 ...
- asp.net MVC 中 Session统一验证的方法
验证登录状态的方法有:1 进程外Session 2 方法过滤器(建一个类继承ActionFilterAttribute)然后给需要验证的方法或控制器加特性标签 3 :新建一个BaseContro ...
最新文章
- 裸centos安装PCRE时报错解决
- 打造一个TB级微服务日志监控平台
- 植入“电商基因” 传统产业搭上网络快车[图]
- 【数据结构与算法】平衡二叉树、红黑树
- mongodb不等于某个值_MongoDB的安装以及基本增删改查命令
- 谈谈var变量提升以及var,let,const的区别
- 运用Loadrunner测试Mysql数据库性能
- 【转】ubuntu12.04完美安装QQ2012、QQMusic、Foxmail等--wine
- Windows server 2012 R2 无法安装vc2015
- chrome打不开网页 转圈圈
- java printout_word中printout函数的相关参数介绍 | 学步园
- VUE 保证输入框无法输入半角数字以外的字符
- python独立样本t检验 图_Graphpad 分析教程 | 手把手教你玩转独立样本 t 检验
- html5 基本布局+新标签+新选择器 + 线性渐变
- 《Angular之项目启动95%emitting LicenseWebpackPlugin--stop了》
- h1z1最新消息服务器,h1z1服务器在哪 | 手游网游页游攻略大全
- 小米路由器3G建站折腾笔记6 - 总结
- 顶尖文案app_17个文案网站 5款短视频软件,自媒体人必备,直接拿走不谢
- 英特尔图形处理器第8代架构
- 科学计算机算余切,科学计算机在线算(科学计算器如何算正态分布)