在.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中的的使用相关推荐

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

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

  2. [第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui

    在我上篇文章如何在ASP.Net Core的生产环境中保护swagger ui中,我们讨论了如何使用基本身份验证来保护 swagger ui. 使用 OAuth 2.0 和 OpenIdConnect ...

  3. ASP.NET Core依赖注入容器中的动态服务注册

    介绍 在ASP.NET Core中,每当我们将服务作为依赖项注入时,都必须将此服务注册到ASP.NET Core依赖项注入容器.但是,一个接一个地注册服务不仅繁琐且耗时,而且容易出错.因此,在这里,我 ...

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

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

  5. VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug

    今天试着用VS 2017去开发一个.net core项目,想着看看.net core的开发和MVC5开发有什么区别,然后从中发现了一个VS2017的Bug. 首先,我们新建项目,ASP.NET Cor ...

  6. NET问答: 如何在 ASP.NET Core 的 .json 文件中读取 AppSettings ?

    咨询区 Oluwafemi: 在 appsettings.json 中我有如下的 AppSettings 实体数据,如下代码所示: {"AppSettings": {"t ...

  7. 【Docker】Asp.net core在docker容器中的端口问题

    还记得[One by one系列]一步步学习docker(三)--实战部署dotnetcore中遇到的问题么?容器内部启动始终是80端口,并不由命令左右. docker run --name cont ...

  8. TechEmpower Web 框架性能第19轮测试结果正式发布,ASP.NET Core在主流框架中拔得头筹...

    TechEmpower第19轮编程语言框架性能排行榜2020年5月28日正式发布,详见官方博客:https://www.techempower.com/blog/2020/05/28/framewor ...

  9. Asp.Net Core 中间件应用实战中你不知道的那些事

    一.概述 这篇文章主要分享Endpoint 终结点路由的中间件的应用场景及实践案例,不讲述其工作原理,如果需要了解工作原理的同学, 可以点击查看以下两篇解读文章: •Asp.Net Core EndP ...

最新文章

  1. 提高C++代码质量 - [083]不要返回局部变量的引用
  2. 116. Leetcode 1143. 最长公共子序列 (动态规划-子序列问题)
  3. Andoird --- Json 经典异常:org.json.JSONException: Unterminated string at character
  4. HDU 1518 Square
  5. 基础-栈队列简单测试
  6. 网站开发技巧参考大全转
  7. 微软发布首个 Chromium Edge stable 预览版
  8. 把几个任务分配到几个设备上的代码
  9. 微信公众号推送(Java)
  10. endnote中文格式参考文献标注
  11. FillRect、FrameRect、Rectangle 矩形绘制函数使用对比分析
  12. SQL Server 索引中的碎片和填充因子
  13. AI还原乾隆后妃样貌,延禧攻略众生相。
  14. 休问情怀谁得似——冰雪小五台苦旅记(十完结篇)
  15. 解决百度网盘限速超简单
  16. 学一点SQL注入基础
  17. Megacli常用命令汇总
  18. Silverlight书籍推荐阅读排行榜
  19. Java内存溢出与栈溢出
  20. Can't attach to the process: ptrace(PTRACE_ATTACH, ..) Operation not permitted

热门文章

  1. nginx php 配置
  2. 15个IT技术人员必须思考的问题
  3. 如何使用 C# 压缩单个文件?
  4. 调整 Docker 中 nginx 的日志级别
  5. 【MSLearn 学习模块】Hi ! ⼀起来学Python
  6. 利用 PGO 提升 .NET 程序性能
  7. .NET Core 调用百度 PaddleOCR 识别图文
  8. 开源项目葫芦藤:IdentityServer4的实现及其运用
  9. 有关Quartz.NET,与一线码农大佬对个线?
  10. Docker Vs Podman