Как Spring Security перенаправляет пользователя, не прошедшего проверку подлинности, на внешнюю страницу входа (AWS Cognito)?

#spring-boot #spring-security #amazon-cognito

#пружинный ботинок #весна-безопасность #amazon-cognito

Вопрос:

Я разработал базовую службу загрузки Spring с защитой Spring со следующей конфигурацией

 spring:  security:  oauth2:  client:  registration:  cognito:  clientId: yyyy  clientSecret: xxxx  scope: openid  redirect-uri: http://localhost:8080/login/oauth2/code/cognito  clientName: spring-sso  provider:  cognito:  issuerUri: https://cognito-idp.eu-west-1.amazonaws.com/zzzzzzzzzz  user-name-attribute: cognito:username  

Все работает нормально, пользователь перенаправляется на страницу единого входа AWS Cognito.

Однако я не могу точно определить, где логика этого перенаправления происходит в Spring framework.

Я включил отладку и вижу список фильтров безопасности, которые вызываются в цепочке.

 WebAsyncManagerIntegrationFilter  SecurityContextPersistenceFilter  HeaderWriterFilter  CsrfFilter  LogoutFilter  OAuth2AuthorizationRequestRedirectFilter  OAuth2LoginAuthenticationFilter  DefaultLoginPageGeneratingFilter  DefaultLogoutPageGeneratingFilter  RequestCacheAwareFilter  SecurityContextHolderAwareRequestFilter  AnonymousAuthenticationFilter  SessionManagementFilter  ExceptionTranslationFilter  FilterSecurityInterceptor  

Я поставил точки отладки OAuth2AuthorizationRequestRedirectFilter DefaultLoginPageGeneratingFilter и , OAuth2LoginAuthenticationFilter но безуспешно.

Где происходит волшебство, когда он создает URL-адрес для отправки пользователя на страницу единого входа:

Если пользователь, не прошедший проверку подлинности, обращается к защищенной странице —gt; затем перенаправьте на страницу входа в систему единого входа

Причина, по которой я заинтересован, заключается в том, чтобы я мог определить, могу ли я использовать ту же библиотеку в старом приложении Jakarta EE или нет.

Ответ №1:

Вызывается интерфейс, отвечающий за перенаправление пользователя, не прошедшего проверку подлинности, в Spring Security AuthenticationEntryPoint . (Я всегда находил название запутанным, но идея в том, что оно указывает не прошедшему проверку подлинности пользователю, где пройти аутентификацию, т. Е. Найти «запись».)

Что касается фильтра, посмотрите в ExceptionTranslationFilter .

В версии , которую я сейчас рассматриваю (5.3.4), она находится в doFilter то handleSpringSecurityException время sendStartAuthentication , то здесь authenticationEntryPoint.commence называется.

Комментарии:

1. Спасибо, при отладке он генерирует uri перенаправления /oauth2/authorization/cognito , а не URL-адрес AWS cognito. Так это происходит где-то еще ниже по течению?

2. Таким образом, похоже, что фактическое перенаправление происходит в строке 218 фильтра oauth2authorizationrequestredirect , когда используется путь сервлета /oauth2/authorization/cognito