浅谈.Net Core 认证系统源码解析(2)

原来是IAuthenticationSchemeProvider类提供认证处理器.而且是通过反射实现(这点开销,就没必要考虑性能问题,当然你可以考虑重构),那么问题来了,在哪里出入IAuthenticationSchemeProvider服务内,回到上面那张图

浅谈.Net Core 认证系统源码解析

微软也提供了默认实现,去看看GetSchemeAsync方法的实现

浅谈.Net Core 认证系统源码解析

ok,到这里就说明认证处理器是通过向这个字典写入值,来实现的.

浅谈.Net Core 认证系统源码解析

上面是认证方案AuthenticationScheme类的核心字段,HandlerType就是认证处理器.

浅谈.Net Core 认证系统源码解析

AuthenticationSchemeProvider类维护了一个_schemes的字典,通过它向外输出.认证方案集合提供类.

接着认证处理器集合提供类AuthenticationHandlerProvider通过解析

认证方案集合提供类,拿到所有的认证处理器.

到这里,很明显,所有的认证处理器都是通过向AuthenticationSchemeProvider的_schemes字典注入认证处理器.既然如此,入口在哪?在AuthenticationBuilder类下面.

浅谈.Net Core 认证系统源码解析

下面是Cookie认证方式注入认证处理器的方式

浅谈.Net Core 认证系统源码解析

AddScmeme方法.在配置参数的同时,指定了处理器.

接着,回到中间件的图

浅谈.Net Core 认证系统源码解析

我们通过AuthenticationBuilder的AddScheme方法向_schemes集合写入了认证处理器且配置了处理器的参数,接着通过AuthenticationHandlerProvider拿到了所有的认证处理器.

接着我们通过Schemes方案集合拿到所有处理认证请求上下文的处理器,执行处理认证请求上下文参数.处理完毕.

接着我们解析Schemes中提供的默认认证方案,代码如下:

浅谈.Net Core 认证系统源码解析

根据

这个配置参数,一般在入口注入:

中配置默认方案名称,拿到默认认证方案.再将处理过的认证请求上下文和默认方案传给IAuthenticationService,这个Service也有默认实现,如下:

浅谈.Net Core 认证系统源码解析

浅谈.Net Core 认证系统源码解析

AuthenticationService将处理过的认证请求上下文交给具体的认证请求处理器来处理.并返回处理结果.认证请求处理器前面说过了,通过AuthenticationBuilder的AddScheme方法来注入.

到这里,整个组件的流程介绍结束.纯属个人理解,能力有限,有问题,请指正,谢谢.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdsyjg.html