asp.net core AuthenticationMiddleware 在WebApi中的的使用
在.net framework 4.5架构下使用认证(Authentication)授权(Authorization)。
IIS使用HttpModule进行认证(Authentication),我们可以选择自己实现认证方式并在web.config中配置,当然也可以选择IIS默认提供的几种实现,这里不再继续展开讨论。
asp.net core默认提供了几种默认的实现方式,包括Identity,Facebook, Google, Microsoft Account, Twitter 等等。这里介绍Basic Authentication认证方式。asp.net core的请求通道由一系列的请求委托组成,一个一个顺序执行。
实现Basic Authentication最简单的方式是添加一个中间件。新建文件BasicAuthenticationMiddlerware
public sealed class BasicAuthenticationMiddlerware
{
private readonly RequestDelegate _next;
public BasicAuthenticationMiddlerware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
string authentication = context.Request.Headers["Authorization"];
if (authentication != null && authentication.Contains("Basic"))
{
//Extract credentials
var usernamePasswordStr = authentication.Trim().Split(" ")[1];
var userNamAndPasswordArr = usernamePasswordStr.Split(':');
if (userNamAndPasswordArr.Length != 2)
{
context.Response.StatusCode = 401;
}
var username = userNamAndPasswordArr[0];
var password = userNamAndPasswordArr[1];
/*
* 根据用户账号密码验证用户有效性
* 如果有效
* 执行 await _next.Invoke(context);
* 否则
* context.Response.StatusCode = 401;
*/
if (true)
{
await _next.Invoke(context);
}
else
{
context.Response.StatusCode = 401;
}
}
else
{
context.Response.StatusCode = 401;
}
}
}
完成中间件的定义以后,在Startup.cs文件的Configure方法中注册中间件以开启验证。注意,这里一定要添加在app.UseMvc()之前。
app.UseMiddleware<BasicAuthenticationMiddlerware>();
或者通过添加IApplicationBuilder的扩张方法,再用扩展方法进行注册。代码如下
public static class BasicAuthenticationMiddlerwareExtension
{
public static IApplicationBuilder UseBasicAuthenticationMiddlerware(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<BasicAuthenticationMiddlerware>();
}
}
Startup.cs的Configure的内容如下
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseBasicAuthenticationMiddlerware();
app.UseMvc();
}
启动WebApi。不添加头文件Authorization,如预期返回401状态码。
添加头部信息,如预期返回数据。
原文地址:http://www.cnblogs.com/Zhang-Xiang/p/7536803.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
asp.net core AuthenticationMiddleware 在WebApi中的的使用相关推荐
- asp.net core系列 38 WebAPI 返回类型与响应格式--必备
一.返回类型 ASP.NET Core 提供以下 Web API Action方法返回类型选项,以及说明每种返回类型的最佳适用情况: (1) 固定类型 (2) IActionResult (3) Ac ...
- [第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui
在我上篇文章如何在ASP.Net Core的生产环境中保护swagger ui中,我们讨论了如何使用基本身份验证来保护 swagger ui. 使用 OAuth 2.0 和 OpenIdConnect ...
- ASP.NET Core依赖注入容器中的动态服务注册
介绍 在ASP.NET Core中,每当我们将服务作为依赖项注入时,都必须将此服务注册到ASP.NET Core依赖项注入容器.但是,一个接一个地注册服务不仅繁琐且耗时,而且容易出错.因此,在这里,我 ...
- asp.net core 系列之webapi集成EFCore的简单操作教程
因为官网asp.net core webapi教程部分,给出的是使用内存中的数据即 UseInMemoryDatabase 的方式, 这里记录一下,使用SQL Server数据库的方式即 UseSql ...
- VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug
今天试着用VS 2017去开发一个.net core项目,想着看看.net core的开发和MVC5开发有什么区别,然后从中发现了一个VS2017的Bug. 首先,我们新建项目,ASP.NET Cor ...
- NET问答: 如何在 ASP.NET Core 的 .json 文件中读取 AppSettings ?
咨询区 Oluwafemi: 在 appsettings.json 中我有如下的 AppSettings 实体数据,如下代码所示: {"AppSettings": {"t ...
- 【Docker】Asp.net core在docker容器中的端口问题
还记得[One by one系列]一步步学习docker(三)--实战部署dotnetcore中遇到的问题么?容器内部启动始终是80端口,并不由命令左右. docker run --name cont ...
- TechEmpower Web 框架性能第19轮测试结果正式发布,ASP.NET Core在主流框架中拔得头筹...
TechEmpower第19轮编程语言框架性能排行榜2020年5月28日正式发布,详见官方博客:https://www.techempower.com/blog/2020/05/28/framewor ...
- Asp.Net Core 中间件应用实战中你不知道的那些事
一.概述 这篇文章主要分享Endpoint 终结点路由的中间件的应用场景及实践案例,不讲述其工作原理,如果需要了解工作原理的同学, 可以点击查看以下两篇解读文章: •Asp.Net Core EndP ...
最新文章
- 提高C++代码质量 - [083]不要返回局部变量的引用
- 116. Leetcode 1143. 最长公共子序列 (动态规划-子序列问题)
- Andoird --- Json 经典异常:org.json.JSONException: Unterminated string at character
- HDU 1518 Square
- 基础-栈队列简单测试
- 网站开发技巧参考大全转
- 微软发布首个 Chromium Edge stable 预览版
- 把几个任务分配到几个设备上的代码
- 微信公众号推送(Java)
- endnote中文格式参考文献标注
- FillRect、FrameRect、Rectangle 矩形绘制函数使用对比分析
- SQL Server 索引中的碎片和填充因子
- AI还原乾隆后妃样貌,延禧攻略众生相。
- 休问情怀谁得似——冰雪小五台苦旅记(十完结篇)
- 解决百度网盘限速超简单
- 学一点SQL注入基础
- Megacli常用命令汇总
- Silverlight书籍推荐阅读排行榜
- Java内存溢出与栈溢出
- Can't attach to the process: ptrace(PTRACE_ATTACH, ..) Operation not permitted