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(" ")[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跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初衷以及目的

因为我学的是软件工程专业的嘛&#xff0c;当初高考误打误撞选择了这门专业&#xff0c;也算是满意吧&#xff0c;毕竟自己对计算机还是挺感兴趣的。 很早以前我就想把计算机学好&#xff0c;希望用华丽的编程技术去创造有趣的游戏&#xff0c;但一直因为各种因素直到高三我才…

P1032-字串变换【bfs】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP1032 题目大意 给若干个变化规则&#xff0c;表示A中的axa_xax​子串可以变化为bxb_xbx​中的子串&#xff0c;求至少要多少次变化才可以变为B子串。 解题思路 暴力广搜用mapmapmap库判重。 codecod…

WebSocket In ASP.NET Core(二)

Introduce上篇博文中&#xff0c;介绍了WebSocket的基本原理&#xff0c;以及一个简单的Demo用来对其有一个大致的认识。这篇博文讲的是我们平常在网站上可能会经常遇到的——实时聊天&#xff0c;本文就是来讲在.NET-Core使用WebSocket来实现一个“乞丐版”的在线实时聊天Demo…

不支持POST请求方法,支持以下GET、

大家好&#xff0c;我是雄雄。 刚刚在用**FeignClient**注解的时候&#xff0c;报了个错&#xff0c;不支持POST请求方法&#xff0c;支持以下GET、。 字面意思上看&#xff0c;好像是让把请求方式从post改成get. 但是&#xff0c;我检查了下我的代码&#xff0c;get提交方式…

Java面试之数据库面试题

转载自 Java面试之数据库面试题 1、触发器的作用&#xff1f; 触发器是一中特殊的存储过程&#xff0c;主要是通过事件来触发而被执行的。它可以强化约束&#xff0c;来维护数据的完整性和一致性&#xff0c;可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级…

P3701 -「伪模板」主席树【网络流,最大流】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP3701 题目大意 给出若干个人的克制关系 给出两边每个人的种类和血量。当两个人pkpkpk后&#xff0c;双方各−1hp-1hp−1hp&#xff0c;同一边的YYYYYYYYY可以给每个同一方的J1hpJ\ 1hpJ 1hp&#xf…

给数组调换顺序

#include<stdio.h> main(){int i,j,t,a[]{1,2,3,4,5};i0;j4;while(j>i){ta[i];a[i]a[j];a[j]t;i;j--;}for(i0;i<5;i){printf("%d ",a[i]);} }1、注意a【】里面的值&#xff0c;后面有大括号可以不写了&#xff0c;写小了反而错了&#xff0c;如果要写后…

微服务如何实现各个模块之间相互调用

大家好&#xff0c;我是雄雄&#xff0c;现在是:2022年8月23日21:08:53 前言 在做微服务项目时&#xff0c;我们可能都会遇到这样的情况&#xff0c;那就是A服务需要调用B服务中的某个接口&#xff0c;那有这样的需求时&#xff0c;我们应该怎么处理呢&#xff1f; 实现 使用…

2017年秋招美团Java程序员开发,看我如何拿到offer

转载自 2017年秋招美团Java程序员开发&#xff0c;看我如何拿到offer 本人是一名本科毕业非计算机专业的程序员&#xff0c;面了阿里&#xff0c;结果没过&#xff0c;最后面上了美团&#xff0c;热乎乎的面经&#xff0c;昨天面的美团&#xff0c;虽然面完了HR面&#xff0c…

ASP.NET Core 运行原理剖析

1.1. 概述在ASP.NET Core之前&#xff0c;ASP.NET Framework应用程序由IIS加载。Web应用程序的入口点由InetMgr.exe创建并调用托管。以初始化过程中触发HttpApplication.Application_Start()事件。开发人员第一次执行代码的机会是处理Application_StartGlobal.asax中的事件。在…

nssl1155-遨游【二分答案,SPFA】

正题 题目大意 有若干个省&#xff0c;每个省有些城市&#xff0c;每个省有优惠Xi%X_i\%Xi​%&#xff0c;若在i省内的道路就优惠Xi%X_i\%Xi​%&#xff0c;若在i到j省的道路就优惠(Xi%Yi%)2\frac {(X_i\%Y_i\%)}22(Xi​%Yi​%)​&#xff0c;求一个区间[L,R][L,R][L,R]边权在…

使用wxJava开发微信服务(公众)号,实现新建素材的功能

大家好&#xff0c;我是雄雄。 前言 微信服务&#xff08;公众号&#xff09;号开发&#xff0c;前面已经整理过了几篇文章了&#xff0c;如下&#xff1a; java实现微信服务&#xff08;公众&#xff09;号用户关注时&#xff0c;获取openid&#xff0c;安全模式下的加密解密…

经典指针程序互换(一)

#include<stdio.h> huan(int *p,int *q){int t;t*p;*p*q;*qt;}int main(){ int a3,b10; huan(&a,&b);printf("%d %d",a,b); }这里我最疑惑的是不是改变*p的值就改变了a的值&#xff0c;为此&#xff0c;我专门敲了段代码&#xff0c;验证一下 #inclu…

Spring MVC 到底是如何工作的

转载自 Spring MVC 到底是如何工作的 这篇文章将深入探讨Spring框架的一部分——Spring Web MVC的强大功能及其内部工作原理。 这篇文章的源代码可以在GitHub上找到。 项目安装 在本文中&#xff0c;我们将使用最新、最好的Spring Framework 5。我们将重点介绍Spring的经典…

Entity Framework中的字符串插值引发担忧

将内插字符串&#xff08;Interpolated Strings&#xff09;自动地转化为参数化SQL语句&#xff0c;这是Entity Framework Core 2提供的一个新特性。虽然该特性从设计上是为了避免出现SQL语句编写上的问题&#xff0c;但是有人担心这会导致更多的SQL注入攻击。下面给出一个正确…

jeecg-boot集成xxl-job调度平台,每秒/每分钟/手动都能执行成功,但是设置固定时间不触发?

大家好&#xff0c;我是雄雄。 目录 这里写目录标题目录bug说明解决bug的过程解决方法结论今天在用jeecg-boot集成了的xxl-job的时候&#xff0c;遇到了个奇葩的问题&#xff08;其实一点都不奇葩&#xff09;&#xff0c;投入了几个人&#xff0c;一起看这个问题&#xff0c;看…

nssl1156-今天你AK了吗?【康托展开,高精度,二分答案,树状数组】

正题 题目大意 求n个数的全排列的第k个。 解题思路 首先康拓逆展开 ∑ii<nxi(n−i)!\sum^{i<n}_i x_i(n-i)!∑ii<n​xi​(n−i)! 求每个时候第xxx大的数 然后因为n(n−1)!n!n(n-1)!n!n(n−1)!n! so我们可以直接用余数 这是n3n3n3时是序列&#xff0c;我们可以发现我…

指针数组(二)

#include<stdio.h> void f(int *pA,int len){int i;for(i0;i<len;i){printf("%d",*(pAi)); }printf("\n");}main(){int a[5]{1,2,3,4,5};int b[4]{5,4,3,2};f(a,5);f(b,3);} 我想不用指针直接用函数来输出&#xff0c;看下 #include<stdio.h…

Spring经典面试题和答案

转载自 Spring经典面试题和答案 Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用&#xff0c;但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发&#xff0c;并通过POJO为基础的编…

use of CGLib-based proxies by setting proxyTargetClass=true on @EnableAsync and/or @EnableCaching

大家好&#xff0c;我是雄雄。 今天在做异步的时候&#xff0c;报了个错&#xff0c;错误信息如下&#xff1a; Error starting ApplicationContext. To display the conditions report re-run your application with ‘debug’ enabled. 2022-08-25 17:58:30.784 [main] ERRO…