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

来源:互联网 发布:linux 自动启动服务 编辑:程序博客网 时间:2024/05/29 04:39

在.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跨平台或扫描二维码关注

阅读全文
0 0