spring-authorization-server,client认证过程理解分析

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容