上一章快速添加了swagger文档管理功能,我的第一个netcore2.2 api项目搭建(二)

这一章实现目标三:api添加身份验证功能

 

在实现该目标之前,先得理解netcore运行机制。

我的第一个netcore2.2 api项目搭建(三)

这是微软提供的图,从图上可以看出,一个请求发出,逐个通过middleware,然后做出响应。这里的middleware被称作中间件。而要添加安全验证,得在响应之前添加验证功能,那咱们就可以利用这点,添加一个在响应请求之前的中间件,这个中间件来实现验证功能,如果通过验证就响应请求,否则直接返回请求违法信息。在我看来这个中间级有点像mvc中过滤器。。

 

1.1添加一个空的中间件MyAutoMiddleware

public class MyAutoMiddleware
    {
        private readonly RequestDelegate _next;

        public MyAutoMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public Task Invoke(HttpContext httpContext)
        {
            return _next(httpContext);
        }
    }

1.2启用中间件

我的第一个netcore2.2 api项目搭建(三)

在UserMvc之前添加中间件,并在中间件上打上断点,F5运行

我的第一个netcore2.2 api项目搭建(三)

发现首先进入中间件,连按F5跳出,然后进入swagger主页,在values控制器的GetUsers方法上打上断点并执行swagger页面GetUsers api

我的第一个netcore2.2 api项目搭建(三)

发现首先进入中间件,F5过后进入GetUsers方法

我的第一个netcore2.2 api项目搭建(三)

我的第一个netcore2.2 api项目搭建(三)

到这一步,就可以看出请求被中间件劫持了,这时咱们就可以名正言顺的使用中间件进行验证了,这里可以先简单的写一些验证。。

在继续添加验证之前,得先了解验证过程

在netcore中有三种验证方式,Policy,Roles、AuthenticationSchemes

我的第一个netcore2.2 api项目搭建(三)

咱们这先用Roles验证,因为他最简单好懂。。。继续,验证之前还得做啥呢?

1.角色,比如说你是系统管理员还是其中一个小角色等等

2.哪些api需要验证

知道这些咱们就可以继续验证的过程了。

针对问题1,得有角色,咱们先简单的就分为App1、App2、Admin好了,不用写代码。。。

    

针对问题2,只要在响应的控制器上加上验证的Attribute就好了,如果该控制器有多个角色,只要改成Roles =“App1,Admin”就好了,用逗号隔开。

我的第一个netcore2.2 api项目搭建(三)

F5运行,更改网址到get,结果如下:

我的第一个netcore2.2 api项目搭建(三)

可以看出,无身份验证方案,报错了。。

在netcore中,身份信息是存在HttpContext的User对象中的:

我的第一个netcore2.2 api项目搭建(三)

如此,只要咱们在中间件给HttpContext的User赋值就好,代码:

我的第一个netcore2.2 api项目搭建(三)

public Task Invoke(HttpContext httpContext)
        {
            var lc = new List<Claim>();
            var claim = new Claim("姓名", "张三");
            lc.Add(claim);
            claim = new Claim(ClaimTypes.Role, "App1");
            lc.Add(claim);
            ClaimsIdentity identity = new ClaimsIdentity(lc);
            ClaimsPrincipal principal = new ClaimsPrincipal(identity);
            httpContext.User = principal;
            return _next(httpContext);
        }
View Code

相关文章: