asp.net core AuthenticationMiddleware 在WebApi中的的使用

在.net framework 4.5架构下使用认证(Authentication)授权(Authorization)。

image

IIS使用HttpModule进行认证(Authentication),我们可以选择自己实现认证方式并在web.config中配置,当然也可以选择IIS默认提供的几种实现,这里不再继续展开讨论。

 

asp.net core默认提供了几种默认的实现方式,包括Identity,Facebook, Google, Microsoft Account, Twitter 等等。这里介绍Basic Authentication认证方式。asp.net core的请求通道由一系列的请求委托组成,一个一个顺序执行。

image

实现Basic Authentication最简单的方式是添加一个中间件。新建文件BasicAuthenticationMiddlerware

 

复制代码
 1 public sealed class BasicAuthenticationMiddlerware
 2     {
 3         private readonly RequestDelegate _next;
 4 
 5         public BasicAuthenticationMiddlerware(RequestDelegate next)
 6         {
 7             _next = next;
 8         }
 9 
10         public async Task InvokeAsync(HttpContext context)
11         {
12             string authentication = context.Request.Headers["Authorization"];
13             if (authentication != null && authentication.Contains("Basic"))
14             {
15                 //Extract credentials
16                 var usernamePasswordStr = authentication.Trim().Split(" ")[1];
17 
18                 var userNamAndPasswordArr = usernamePasswordStr.Split(':');
19                 if (userNamAndPasswordArr.Length != 2)
20                 {
21                     context.Response.StatusCode = 401;
22                 }
23 
24                 var username = userNamAndPasswordArr[0];
25                 var password = userNamAndPasswordArr[1];
26 
27                 /*
28                  * 根据用户账号密码验证用户有效性
29                  * 如果有效
30                  * 执行 await _next.Invoke(context);
31                  * 否则
32                  * context.Response.StatusCode = 401;
33                  */
34 
35                 if (true)
36                 {
37                     await _next.Invoke(context);
38                 }
39                 else
40                 {
41                     context.Response.StatusCode = 401;
42                 }
43             }
44             else
45             {
46                 context.Response.StatusCode = 401; 
47             }
48             
49         }
50
复制代码

完成中间件的定义以后,在Startup.cs文件的Configure方法中注册中间件以开启验证。注意,这里一定要添加在app.UseMvc()之前。

app.UseMiddleware<BasicAuthenticationMiddlerware>();

 

或者通过添加IApplicationBuilder的扩张方法,再用扩展方法进行注册。代码如下

 

1   public static class BasicAuthenticationMiddlerwareExtension
2     {
3         public static IApplicationBuilder UseBasicAuthenticationMiddlerware(
4             this IApplicationBuilder builder)
5         {
6             return builder.UseMiddleware<BasicAuthenticationMiddlerware>();
7         }
8     }

 

 

 

Startup.cs的Configure的内容如下

 

复制代码
1 public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
2 {
3      if (env.IsDevelopment())
4      {
5         app.UseDeveloperExceptionPage();
6      }
7        app.UseBasicAuthenticationMiddlerware();
8        app.UseMvc();
9 }
复制代码

启动WebApi。不添加头文件Authorization,如预期返回401状态码。

image

 

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

image

 


 

 

作者:Zhang-Xiang

出处:https://www.cnblogs.com/Zhang-Xiang/p/7536803.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Zhang_Xiang  阅读(1985)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题