Я пытаюсь написать загрузочное приложение Spring, которое использует Oauth2 и Google OpenID для входа в систему, но вместо отслеживания сеанса с помощью файлов cookie, я хотел бы отслеживать его с помощью заголовков аутентификации (X-auth или Authentication-info.
В настоящее время я продолжаю сеансы с использованием JDBC, и при использовании файлов cookie вход в систему работает отлично, но как только я сообщаю Spring об использовании заголовков аутентификации, процесс Oauth начинает давать сбой.
Это, по-видимому,сбой, потому что соответствующая информация о сеансе не передается в / из Google. Мой процесс входа в систему производит 3 "сеанса"
- Когда пользователь впервые пытается получить доступ к странице и получает страницу входа
- Когда ответ токена возвращается из Google. Этот сеанс указывает на ошибку «authorization_request_not_found»
- Когда пользователь перенаправляется обратно на страницу входа.
Похоже, что некоторая информация о сеансе передается в / из 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