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(" ")[]; var userNamAndPasswordArr = usernamePasswordStr.Split(':');
if (userNamAndPasswordArr.Length != )
{
context.Response.StatusCode = ;
} var username = userNamAndPasswordArr[];
var password = userNamAndPasswordArr[]; /*
* 根据用户账号密码验证用户有效性
* 如果有效
* 执行 await _next.Invoke(context);
* 否则
* context.Response.StatusCode = 401;
*/ if (true)
{
await _next.Invoke(context);
}
else
{
context.Response.StatusCode = ;
}
}
else
{
context.Response.StatusCode = ;
} }
}
完成中间件的定义以后,在Startup.cs文件的Configure方法中注册中间件以开启验证。注意,这里一定要添加在app.UseMvc()之前。
或者通过添加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状态码。

添加头部信息,如预期返回数据。

asp.net core AuthenticationMiddleware 在WebApi中的的使用的更多相关文章
- ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介
参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view ...
- asp.net core系列 38 WebAPI 返回类型与响应格式--必备
一.返回类型 ASP.NET Core 提供以下 Web API Action方法返回类型选项,以及说明每种返回类型的最佳适用情况: (1) 固定类型 (2) IActionResult (3) Ac ...
- 从ASP.Net Core Web Api模板中移除MVC Razor依赖项
前言 :本篇文章,我将会介绍如何在不包括MVC / Razor功能和包的情况下,添加最少的依赖项到ASP.NET Core Web API项目中. 一.MVC VS WebApi (1)在ASP. ...
- ASP.NET Core 2.2 WebApi 系列【九】使用SignalR (作者:tenghao510 ) 学习及内容补充
原文地址: ASP.NET Core 2.2 WebApi 系列[九]使用SignalR 今天,看到了大牛的这篇博文, 发了一下评论, 我很惊喜, 没想到他很快就回复了我, 而且通过QQ帮助了S ...
- asp.net core 2.0 webapi集成signalr
asp.net core 2.0 webapi集成signalr 在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.N ...
- 在ASP.NET Core的startup类中如何使用MemoryCache
问: 下面的代码,在ASP.NET Core的startup类中创建了一个MemoryCache并且存储了三个键值“entryA”,“entryB”,“entryC”,之后想在Controller中再 ...
- asp.net core 系列之webapi集成EFCore的简单操作教程
因为官网asp.net core webapi教程部分,给出的是使用内存中的数据即 UseInMemoryDatabase 的方式, 这里记录一下,使用SQL Server数据库的方式即 UseSql ...
- ASP.NET Core MVC应用程序中的后台工作任务
在应用程序的内存中缓存常见数据(如查找)可以显着提高您的MVC Web应用程序性能和响应时间.当然,这些数据必须定期刷新. 当然你可以使用任何方法来更新数据,例如Redis中就提供了设定缓存对象的生命 ...
- asp.net core系列 37 WebAPI 使用OpenAPI (swagger)中间件
一.概述 在使用Web API时,对于开发人员来说,了解其各种方法可能是一项挑战.在ASP.NET Core上,Web api 辅助工具介绍二个中间件,包括:Swashbuckle和NSwag .NE ...
随机推荐
- 《JAVA程序设计》结对编程联系_四则运算(第一周:阶段总结)
结对对象与其博客链接 20175312陶光远:https://www.cnblogs.com/20175312-tgy/p/10630566.html 需求分析 (一)功能需求 1.自动生成题目(本周 ...
- SVM原理 (转载)
1. 线性分类SVM面临的问题 有时候本来数据的确是可分的,也就是说可以用 线性分类SVM的学习方法来求解,但是却因为混入了异常点,导致不能线性可分,比如下图,本来数据是可以按下面的实线来做超平面分离 ...
- 【Vue-Cli3.0】【2】渲染
哈哈哈,发工资啦,发工资啦,立刻就买了一个matebook D .开启了新的编程工作区了. 进入正题 Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统.这句话来自 ...
- Java链表基本操作和Java.util.ArrayList
Java链表基本操作和Java.util.ArrayList 今天做了一道<剑指offer>上的一道编程题“从尾到头打印链表”,具体要求如下:输入一个链表,按链表值从尾到头的顺序返回一个A ...
- Date动态获取时间
·getDate | 根据本地时间获取当前日期(本月的几号) ·getDay | 根据本地时间获取今天是星期几(0-Sunday,1-Monday.. ...
- 源自于NEO的KeyValue 数据库面世啦
虽然想把标题取得大一点,但终究不是什么太大不了的工作,还是安分守己的开始介绍吧. 项目组成 这个项目叫做LightDB 由三个部分构成 Lightdb.lib 是对rocksdb做了一层封装, ...
- 巨坑npm run dev 报错 终于找到正确答案 Error: EPERM: operation not permitted, open '/data/public/build/css/add.p
Windows10环境 npm run dev 报错 终于找到正确答案 Error: EPERM: operation not permitted, open '/data/public/build ...
- 印象笔记 MAC安装使用旧版本
印象笔记终于支持markdown了,赞! 第一个beta版用起来非常不错.提示更新安装新版本后保存markdown一直提示 "Note content is invalid.",无 ...
- browser-sync + http-proxy-middleware 配置代理跨域
写代理js文件下面是文件内容 /** * Module dependencies. */ var browserSync = require('browser-sync').create() var ...
- vue中使用stylus
1.创建完成一个初始项目后,通过 npm install stylus -D命令,在项目内安装stylus.(注意:命令结尾 -D 即是 --save-dev 的简写形式) 2.需要安装loader, ...