Asp.Net Core 系列教程 (三)身份认证

学习身份认证,请先无比按照教程二,把Postman安装好

Postman国内下载貌似网速很慢讷!

这里附一个下载地址:http://nuget.uuids.cn:1002/postmanx64.exe,这个是我自己搭建的服务器,10m/s,性能一般般,别挤炸了。

好了进入正题。

新建一个Asp.netCore 项目 (我用的VS2019)

VS下载地址:https://visualstudio.microsoft.com/zh-hans/ 版本无所谓,你都混到来看我博客了,计较VS2019的版本 是没意义的。

Asp.Net Core 系列教程 (三)身份认证_第1张图片

项目名称 WebAuthorize。其他不变。单击创建 

Asp.Net Core 系列教程 (三)身份认证_第2张图片

嗯哼!我们学的 是 身份认证 所以呀! 这里选择 "空"。

 版本什么的 尽量选择和我一样的,其他版本不排除出现 话题之外的问题。.net core 2.0以下的就别用了。Asp.Net Core 系列教程 (三)身份认证_第3张图片

 项目结构非常简单

如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace WebAuthorize
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello World!").ConfigureAwait(true);
            });
        }
    }
}

进来之后 应用直接给你返回个HelloWorld 结束。

跑一下看看!啊哈!就是这样!

Asp.Net Core 系列教程 (三)身份认证_第4张图片

 好了,现在我们加个中间件 过滤请求。

啥加 中间件?这怎么解释!!!

直白点就是 客户端请求到了服务器后,在 控制器和服务器之间加入一层 中间处理层!

还不懂?Ctrl+W 右拐!

打开PostMan。

填写好 参数可以得到下图

Asp.Net Core 系列教程 (三)身份认证_第5张图片

接下来我们配置身份认证信息

 Asp.Net Core 系列教程 (三)身份认证_第6张图片

在Authorzation下选 basic Auth, 并把用户名和密码填好

 点一下”Preveiw Request ” PostMan会自动生成请求信息。然后转到Headers下

就可以看到下图

Asp.Net Core 系列教程 (三)身份认证_第7张图片

大家可以注意到 左边key 添加了一个Authorization  键值为Basic 一串字符

我们把这串字符 拿到这个网址

http://tool.oschina.net/encrypt?type=3

可以得到下图

Asp.Net Core 系列教程 (三)身份认证_第8张图片

啥意思?

其实PostMan 是将 我输入的密码和账号 以字节的形式转换为了base

64 字符串,你要知道 http协议 是超本文,传输字节数据 不方便,所以做了一次转换,(base64 是啥自己 百度)

 

现在我们在代码中打个断点,并让postman再次发下请求。

看下面的动图

Asp.Net Core 系列教程 (三)身份认证_第9张图片

我们可以在header 中找到Authorize。 

好了,现在我们编写身份认证类

    public static class LaoWangAuthorizeExtension
    {
        public static void AddLaoWangAuthorize(this IApplicationBuilder applicationBuilder)
        {
            applicationBuilder.Use(async (currentContext,nextContext) =>
            {
                if (currentContext.Request.Headers.ContainsKey("Authorization"))
                {
                    var authorize=  currentContext.Request.Headers["Authorization"].ToString();
                    if (authorize.Contains("Basic"))//如果是Basic 身份认证
                    {
                        var info= authorize.Replace("Basic ", string.Empty);
                        var bytes=  Convert.FromBase64String(info);//反解析Basic 64
                        var contents=   Encoding.Default.GetString(bytes);
                        var dd=  contents.Split(":").ToArray();
                        var userName = dd[0];//用户名
                        var userPwd = dd[1];//密码
                        if (userName== "GeBiLaoWang"&&userPwd=="123456")
                        {
                            await currentContext.Response.WriteAsync("验证通过").ConfigureAwait(true);
                            await nextContext?.Invoke();
                            return;
                        }
                    }
                }
                currentContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
                await currentContext.Response.WriteAsync("See tou tomorrow!").ConfigureAwait(true);

            });
        }
    }

然后将代码修改为如下

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.AddLaoWangAuthorize();
            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello World!").ConfigureAwait(true);
            });
        }

启动 浏览器查看。

 Asp.Net Core 系列教程 (三)身份认证_第10张图片

因为我们代码做了拦截 ,所以

这里直接 再见了!

再看下 postman

当我们用错误的账号时

Asp.Net Core 系列教程 (三)身份认证_第11张图片

当我们用正确的账号时

Asp.Net Core 系列教程 (三)身份认证_第12张图片

身份认证就是这么简单。 

源代码  见我的下载区

你可能感兴趣的:(.Net,Core,C#)