在.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()之前。

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状态码。

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

asp.net core AuthenticationMiddleware 在WebApi中的的使用的更多相关文章

  1. ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介

    参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view ...

  2. asp.net core系列 38 WebAPI 返回类型与响应格式--必备

    一.返回类型 ASP.NET Core 提供以下 Web API Action方法返回类型选项,以及说明每种返回类型的最佳适用情况: (1) 固定类型 (2) IActionResult (3) Ac ...

  3. 从ASP.Net Core Web Api模板中移除MVC Razor依赖项

    前言 :本篇文章,我将会介绍如何在不包括MVC / Razor功能和包的情况下,添加最少的依赖项到ASP.NET Core Web API项目中. 一.MVC   VS WebApi (1)在ASP. ...

  4. ASP.NET Core 2.2 WebApi 系列【九】使用SignalR (作者:tenghao510 ) 学习及内容补充

    原文地址:  ASP.NET Core 2.2 WebApi 系列[九]使用SignalR 今天,看到了大牛的这篇博文,  发了一下评论, 我很惊喜, 没想到他很快就回复了我,  而且通过QQ帮助了S ...

  5. asp.net core 2.0 webapi集成signalr

    asp.net core 2.0 webapi集成signalr   在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.N ...

  6. 在ASP.NET Core的startup类中如何使用MemoryCache

    问: 下面的代码,在ASP.NET Core的startup类中创建了一个MemoryCache并且存储了三个键值“entryA”,“entryB”,“entryC”,之后想在Controller中再 ...

  7. asp.net core 系列之webapi集成EFCore的简单操作教程

    因为官网asp.net core webapi教程部分,给出的是使用内存中的数据即 UseInMemoryDatabase 的方式, 这里记录一下,使用SQL Server数据库的方式即 UseSql ...

  8. ASP.NET Core MVC应用程序中的后台工作任务

    在应用程序的内存中缓存常见数据(如查找)可以显着提高您的MVC Web应用程序性能和响应时间.当然,这些数据必须定期刷新. 当然你可以使用任何方法来更新数据,例如Redis中就提供了设定缓存对象的生命 ...

  9. asp.net core系列 37 WebAPI 使用OpenAPI (swagger)中间件

    一.概述 在使用Web API时,对于开发人员来说,了解其各种方法可能是一项挑战.在ASP.NET Core上,Web api 辅助工具介绍二个中间件,包括:Swashbuckle和NSwag .NE ...

随机推荐

  1. vue小白必看的生命钩子函数图解

    还有3个钩子并未出现在图上: 1.activated生命周期钩子函数在keep-alive 组件激活时调用,该钩子在服务器端渲染期间不被调用. 2.deactivated生命周期钩子函数在keep-a ...

  2. 2013年省赛H题

    2013年省赛H题你不能每次都快速幂算A^x,优化就是预处理,把10^9预处理成10^5和10^4.想法真的是非常巧妙啊N=100000构造两个数组,f1[N],间隔为Af2[1e4]间隔为A^N,中 ...

  3. 04flask_scripts使用

    1,flask_script作用 flask_script的作用是可以通过命令行的实行来操作Flask,例如通过命令跑一个开发版本的服务器,设置数据库,定时任务等, 我们把脚本命令代码放在一个叫做ma ...

  4. HDU-1423 最长公共上升子序列(LCIS)

    问题描述: 给定两个字符串x, y, 求它们公共子序列s, 满足si < sj ( 0 <= i < j < |s|).要求S的长度是所有条件序列中长度最长的. 做过最长公共子 ...

  5. Class 和 普通构造函数区别

    1. Class 在语法上更加贴合面向对象的写法 2. Class在实现继承上更加易读.易理解 3. 更易于写java等后端语言 4.本质还是语法糖,使用prototype

  6. Caused by: org.apache.ibatis.builder.BuilderException: Parsing error was found in mapping #{}. Check syntax #{property|(expression), var1=value1, var2=value2, ...}

    解决办法:查看与该项目中的所有#{},应该是 #{}的中间没有写值

  7. php面向对象三大特征

    封装:对外只告诉你如何操作,内部结构不需要你知道. 对外只提供可操作的接口(方法),对内的数据操作不可见 继承:子类可以继承父类的属性和方法,但是有限继承,public  protected  pri ...

  8. Tomcat7在centos7.3上正常运行,在centos7.2就不行了

    我在jdk1.7的环境下,把一个tomcat7从一台centos7.3的服务器迁移到7.2,理论上讲  迁移完成之后只要端口没有被占用,环境变量配置完成,Tomcat是可以正常启动的(空的Tomcat ...

  9. [HACK] docker runtime 挂载宿主机目录

    网上看到的很多所谓的挂载都是容器创建时期的挂载,而且参数都不清不楚,整理如下(--name别名自己加): docker run -v /src/path:/dest/path:rw ${IMAGE} ...

  10. linux学习历程-不熟悉的linux命令

    一:man(执行查看帮助命令) 二:常用的系统工作命令 1:echo echo命令用于显示在终端输出字符串或变量提取后的值,格式“echo [字符串]|[$变量]” 2:date 用于显示系统的时间和 ...