7 "X-KEETS-UserId": "d6448c24-3c4c-4b80-8372-c2d61868f8c6"

时间:2022-06-10 08:46:26

引言: 本文系《认证鉴权与API权限控制在微处事架构中的设计与实现》系列的第二篇,本文重点讲解用户身份的认证与token发放的具体实现。本文篇幅较长,对涉及到的大部分代码进行了分析,可保藏于闲暇时间阅读,欢迎订阅本系列文章。

1. 系统概览

在上一篇 认证鉴权与API权限控制在微处事架构中的设计与实现(一)介绍了该项目的配景以及技术调研与最后选型,并且对付最终实现的endpoint执行功效进行展示。对系统架构虽然有提到,但是并未列出详细流程图。在笔者的应用场景中,Auth系统与网关进行结合。在网关出配置相应的端点信息,如登录系统申请token授权,校验check_token等端点。

下图为网关与Auth系统结合的流程图,网关系统的具体实现细节在后面另写文章介绍。(此处流程图的绘制中,笔者使用极简的语言描述,列位同学轻喷??!)

7 "X-KEETS-UserId": "d6448c24-3c4c-4b80-8372-c2d61868f8c6"

上图展示了系统登录的简单流程,此中的细节有省略,用户信息的合法性校验实际是挪用用户系统。梗概流程是这样,客户端请求达到网关之后,按照网关识另外请求登录端点,转发到Auth系统,将用户的信息进行校验。

另一方面是对付一般请求的校验。一些不需要权限的果然接口,在网关处配置好,请求达到网关后,匹配了路径将会直接放行。如果需要对该请求进行校验,会将该请求的相关验证信息截取,以及API权限校验所需的上下文信息(笔者项目对付一些操纵进行权限前置验证,下一篇章会讲到),挪用Auth系统,校验告成后进行路由转发。

7 "X-KEETS-UserId": "d6448c24-3c4c-4b80-8372-c2d61868f8c6"

这篇文章就重点讲解我们在第一篇文章中提到的用户身份的认证与token发放。这个也主要包罗两个方面:

用户合法性的认证

获取到授权的token

2. 配置与类图 2.1 AuthorizationServer主要配置

关于AuthorizationServer和ResourceServer的配置在上一篇文章已经列出。AuthorizationServer主要是担任了AuthorizationServerConfigurerAdapter,覆写了其实现接口的三个要领:

1 //对应于配置AuthorizationServer安适认证的相关信息,创建ClientCredentialsTokenEndpointFilter核心过滤器 2 @Override 3 public void configure(AuthorizationServerSecurityConfigurer security) throws Exception { 4 } 5 //配置OAuth2的客户审察关信息 6 @Override 7 public void configure(ClientDetailsServiceConfigurer clients) throws Exception { 8 } 9 //配置身份认证器,配置认证方法,TokenStore,TokenGranter,OAuth2RequestFactory 10 @Override 11 public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { 12 }

2.2 主要Authentication类的类图

7 "X-KEETS-UserId": "d6448c24-3c4c-4b80-8372-c2d61868f8c6"

主要的验证要领authenticate(Authentication authentication)在接口AuthenticationManager中,其实现类有ProviderManager,有上图可以看出ProviderManager又依赖于AuthenticationProvider接口,其界说了一个List<AuthenticationProvider>全局变量。笔者这边实现了该接口的实现类CustomAuthenticationProvider。自界说一个provider,,并在GlobalAuthenticationConfigurerAdapter中配置好改自界说的校验provider,覆写configure()要领。

1 @Configuration 2 public class AuthenticationManagerConfig extends GlobalAuthenticationConfigurerAdapter { 3 @Autowired 4 CustomAuthenticationProvider customAuthenticationProvider; 5 @Override 6 public void configure(AuthenticationManagerBuilder auth) throws Exception { 7 auth.authenticationProvider(customAuthenticationProvider);//使用自界说的AuthenticationProvider 8 } 9 }

AuthenticationManagerBuilder是用来创建AuthenticationManager,允许自界说供给多种方法的AuthenticationProvider,好比LDAP、基于JDBC等等。

3. 认证与授权token

下面讲解认证与授权token主要的类与接口。

3.1 内置端点TokenEndpoint