client初始化
系统初始化的时候会调用 http://auth-server:9000/.well-known/openid-configuration
image.png
获取一些认证服务器的信息
image.png
定义了多少个registration会调用多少次。调用逻辑关键类ClientRegistrations
resource初始化
OAuth2ResourceServerJwtConfiguration 会初始化jwt的设置
访问接口http://auth-server:9000/.well-known/openid-configuration
初始化
@Bean
@Conditional(IssuerUriCondition.class)
JwtDecoder jwtDecoderByIssuerUri() {
return JwtDecoders.fromIssuerLocation(this.properties.getIssuerUri());
}
JwtDecoder(NimbusJwtDecoder)的bean
未登录时访问client流程
image.png
登录
image.png
image.png
类功能记录
- SecurityContextPersistenceFilter,会判断是否有session,存储认证上下文信息
-
CsrfFilter,处理跨站请求攻击,会加入CsrfToken
image.png - LoginUrlAuthenticationEntryPoint保存了登录链接loginFormUrl,获取重定向登录页的链接,并重定向到登录页
- ExceptionTranslationFilter 异常处理,处理AuthenticationException和AccessDeniedException
- RequestCacheAwareFilter save request
- HttpSessionRequestCache 记录重定向请求request,登录成功会从这里取,重定向到对应地址,会有两个地方调用saveRequest,一个是RequestCacheAwareFilter,另外一个是异常的时候,ExceptionTranslationFilter会调用
- LogoutFilter 退出相关逻辑
-
OAuth2AuthorizationRequestRedirectFilter 访问客户端/oauth2/authorization/{registrationId}
image.png
判断匹配器是否匹配,匹配请求http://auth-server:9000/oauth2/authorize?response_type=code&client_id=messaging-client&scope=openid&state=pFMr1xCR4SwXA6kSFTvjNPLSD6QaMqX9ZZ-Z754SnDA%3D&redirect_uri=http://127.0.0.1:8080/login/oauth2/code/messaging-client-oidc&nonce=jwTd-U8zxY9frnlswkoyAdqmB_1A80VhtkVsQMkSaLU -
AbstractAuthenticationProcessingFilter(OAuth2LoginAuthenticationFilter的父类) 调用attemptAuthentication尝试认证,如果失败了,会调用failureHandler.onAuthenticationFailure处理失败逻辑,针对path
image.png - OAuth2LoginAuthenticationFilter attemptAuthentication尝试认证
-
WebAuthenticationDetails 设置了sessionId
image.png - ProviderManager 调用不同的provider进行认证
- OAuth2LoginAuthenticationProvider scope不包含openId时生效
- OidcAuthorizationCodeAuthenticationProvider scope必须包含openid,处理oidc协议认证
-
DefaultAuthorizationCodeTokenResponseClient 请求认证服务器获取token(包含idtoken和token)
image.png
oauth/token请求参数
image.png