Цикл перенаправления после утверждения областей на сервере аутентификации OAuth2 Spring Security - PullRequest
0 голосов
/ 19 марта 2019

У меня проблема с Spring Boot 2 с приложением Spring Security 5, которое использует OAuth2 для авторизации пользователей. Вместо просмотра защищенной страницы пользователь перенаправляется обратно на экран авторизации.

Если я переключу провайдера OAuth2 на Google, я смогу правильно увидеть "/ securedPage"

Как избавиться от этого цикла перенаправления и увидеть "/ securedPage"?

Я настроил его так, чтобы была страница входа в систему, где пользователь нажимает кнопку «Войти» и перенаправляется на страницу входа сервера OAuth2. Пользователь может ввести учетные данные и перенаправлен на страницу авторизации, где пользователь может принять необходимую область. Затем браузер перенаправляется на «/ securedPage» на веб-сервере клиента OAuth2, но запрос перенаправляется обратно на сервер авторизации OAuth2.

Вот код моего клиента. Полный исходный код для клиента и сервера доступен по адресу: https://bitbucket.org/forestg83/spring-boot-oauth/src/master/

Starter.java

@SpringBootApplication
public class ClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ClientApplication.class, args);
    }
}

OAuth2LoginConfig.java

@Configuration
@EnableOAuth2Sso
public class OAuth2LoginConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf()
                .disable()
                .antMatcher("/**")
                .authorizeRequests()
                .antMatchers("/", "/index**") 
                .permitAll()
                .anyRequest() // other requests must be authenticated
                .authenticated();
    }
}

application.yml

server:
  port: 80
  servlet:
    context-path: /ui
  session:
    cookie:
      name: UISESSION
security:
  basic:
    enabled: false
  oauth2:
    client:
      clientId: first-client
      clientSecret: secret
      accessTokenUri: http://localhost:8080/oauth/token
      userAuthorizationUri: http://localhost:8080/oauth/authorize
      preEstablishedRedirectUri: http://localhost/ui/securedPage
      useCurrentUri: false
      grantType: authorization_code
      scope:
        - read
      tokenName: oauth_token
      authenticationScheme: query

    resource:
      preferTokenInfo: false
      userInfoUri: http://localhost:8080/user/me

#      clientId: PASTE_YOUR_GOOGLE_CLIENT_ID
#      clientSecret: PASTE_YOUR_CLIENT_SECRET
#      accessTokenUri: https://oauth2.googleapis.com/token
#      userAuthorizationUri: https://accounts.google.com/o/oauth2/v2/auth
#      grantType: authorization_code
#      scope:
#        - https://www.googleapis.com/auth/calendar
#        - profile
#        - email
#      tokenName: oauth_token
#      authenticationScheme: query
#      clientAuthenticationScheme: form
#    resource:
#      preferTokenInfo: false
#      userInfoUri: https://www.googleapis.com/oauth2/v3/userinfo

Вот пример цикла перенаправления: Цикл перенаправления между авторизацией и securedPage Вторая часть цикла перенаправления: перенаправление из / securedPage

...