Как использовать Spring HeaderHttpSessionIdResolver с Google Oauth2.0? - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь написать загрузочное приложение Spring, которое использует Oauth2 и Google OpenID для входа в систему, но вместо отслеживания сеанса с помощью файлов cookie, я хотел бы отслеживать его с помощью заголовков аутентификации (X-auth или Authentication-info.

В настоящее время я продолжаю сеансы с использованием JDBC, и при использовании файлов cookie вход в систему работает отлично, но как только я сообщаю Spring об использовании заголовков аутентификации, процесс Oauth начинает давать сбой.

Это, по-видимому,сбой, потому что соответствующая информация о сеансе не передается в / из Google. Мой процесс входа в систему производит 3 "сеанса"

  1. Когда пользователь впервые пытается получить доступ к странице и получает страницу входа
  2. Когда ответ токена возвращается из Google. Этот сеанс указывает на ошибку «authorization_request_not_found»
  3. Когда пользователь перенаправляется обратно на страницу входа.

Похоже, что некоторая информация о сеансе передается в / из Google, но идентификатор сеанса выполняетсяk right

Запрос в Google Auth:

 https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=1111111111111-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com&scope=openid%20profile%20email&state=NGW6kTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%3D&redirect_uri=http://localhost.com:9733/login/oauth2/code/google

Обратный вызов от Google Auth:

 http://localhost:9733/login/oauth2/code/google?state=NGW6kTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%3D&code=4/xxxx_xxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&scope=openid+email+profile+https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/plus.me+https://www.googleapis.com/auth/userinfo.email&authuser=0&session_state=6ee92xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..2618&prompt=none

Вот некоторая информация о конфигурации весны.

SecurityConfig.java

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated()
            .and()
            .oauth2Login().and().logout().logoutSuccessUrl("/");
    }


}

HttpSessionConfig.java

@Configuration
@EnableJdbcHttpSession
public class HttpSessionConfig extends 
AbstractHttpSessionApplicationInitializer {
    @Bean
    public HttpSessionStrategy httpSessionStrategy() {
        return new HeaderHttpSessionStrategy();
    }

    @Bean
    public HttpSessionIdResolver httpSessionIdResolver() {
        return HeaderHttpSessionIdResolver.authenticationInfo();
    }

}

application.propeerties

spring.security.oauth2.client.registration.google.client-id=xxxx.apps.googleusercontent.com
spring.security.oauth2.client.registration.google.client- 
secret=xxxxxxxxx-xxxxx


server.servlet.session.persistent=true
spring.session.store-type=jdbc
spring.session.jdbc.initialize-schema=always
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...