Как отладить перенаправление Uris в Spring Security oauth2? - PullRequest
0 голосов
/ 30 января 2019

Я использую Spring Security для настройки аутентификации oauth2 в моем веб-приложении Spring Boot, которое работает за обратным прокси-сервером.

Поток:

1) Перейдите на страницу входа в приложение Spring

2) Перенаправление на oauth-провайдера.Вход в систему.

3) Перенаправление на мою конечную точку redirect-uri

4) Обрывы потока и печать страницы входа Spring по умолчанию:

Your login attempt was not successful, try again.

Reason: [invalid_redirect_uri_parameter]

Я включил отладку,консоль показывает:

2019-01-30 09:46:40.094 DEBUG 1 --- [nio-8080-exec-2] o.s.s.authentication.ProviderManager     : Authentication attempt using org.springframework.security.oauth2.client.authentication.OAuth2LoginAuthenticationProvider
2019-01-30 09:46:40.094 DEBUG 1 --- [nio-8080-exec-2] o.s.s.authentication.ProviderManager     : Authentication attempt using org.springframework.security.oauth2.client.oidc.authentication.OidcAuthorizationCodeAuthenticationProvider
2019-01-30 09:46:40.095 DEBUG 1 --- [nio-8080-exec-2] .s.o.c.w.OAuth2LoginAuthenticationFilter : Authentication request failed: org.springframework.security.oauth2.core.OAuth2AuthenticationException: [invalid_redirect_uri_parameter] 
org.springframework.security.oauth2.core.OAuth2AuthenticationException: [invalid_redirect_uri_parameter] 
    at org.springframework.security.oauth2.client.oidc.authentication.OidcAuthorizationCodeAuthenticationProvider.authenticate(OidcAuthorizationCodeAuthenticationProvider.java:136) ~[spring-security-oauth2-client-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]

Копирование кода OidcAuthorizationCodeAuthenticationProvider.java показывает, что следующий оператор вызывает ошибку: (authorizationResponse.getRedirectUri().equals(authorizationRequest.getRedirectUri()))

Я проверил запросы браузера.Параметр uri перенаправления моего первоначального запроса соответствует сайту, на который я перенаправлен после аутентификации на сайте провайдера.(В противном случае поставщик мог бы выдать ошибку несоответствия URI перенаправления.)

Согласно опыту другого пользователя (http://blog.davidvassallo.me/2018/08/10/lessons-learnt-of-spring-boot-oauth2-redirect-uris/) Spring Boot видит «localhost» при запуске за обратным прокси-сервером и, следовательно, redirect-uriбольше не равны (когда localhost не является правильным именем хоста).

Как я могу получить значения authorizationResponse.getRedirectUri() и authorizationRequest.getRedirectUri()? Я хочу посмотреть, какое перенаправление видит Spring Security. Консоль отладкине печатает эти значения.

Обновление: я создал конечную точку, которая печатает request.getRequestURL (). toString (), и на самом деле он печатает исходный URL-адрес, а не обратный URL-адрес прокси. Это может быть проблемой.

...