ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-05-10 10:52:42  阅读:231  来源: 互联网

标签:WebApi core asp 401 app next Authentication context public


在.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

 


 

 

标签:WebApi,core,asp,401,app,next,Authentication,context,public
来源: https://blog.51cto.com/u_12857552/2765006

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有