Я разрабатываю весеннее веб-приложение с SSO architect с помощью Spring OAuth2
- 2 весенних веб-приложения mvc
- 1 сервер авторизации отвечает за единый вход и выдачу / проверку токенов
- 1 сервер ресурсов, обслуживающий / api / me
Все работает хорошо при однократном входе, но я не знаю, как единый выход (1 приложение выходит из системы, другие приложения также выходят из системы). В настоящее время кажется, что каждое приложение с минимальной конфигурацией, такой как фрагмент кода ниже, использует другое хранилище сеансов, и после успешной аутентификации он сохраняет аутентифицированный сеанс в своем собственном хранилище сеансов, и каждый последующий запрос перехватывается с сеансом в файле cookie. Таким образом, при выходе из sso-сервера он не может сделать недействительными связанные сеансы в хранилищах сеансов других приложений. Кто-нибудь может мне предложить несколько стратегий для единого выхода?
Файл application.yml веб-клиента:
security:
oauth2:
client:
clientId: metlife_monitor
clientSecret: password
accessTokenUri: http://localhost:8668/sso-server/oauth/token
userAuthorizationUri: http://localhost:8668/sso-server/oauth/authorize
tokenName: oauth_token
resource:
userInfoUri: http://localhost:8688/api/me
Класс веб-приложения:
@SpringBootApplication
@EnableOAuth2Sso
@EnableJdbcHttpSession
public class Application extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/**")
.authorizeRequests()
.antMatchers("/", "/login**", "/error**", "/webjars/**").permitAll()
.anyRequest().authenticated()
.and().logout()
.logoutUrl("/logout")
.logoutSuccessUrl("http://localhost:8668/sso-server/logout")
.invalidateHttpSession(true)
.deleteCookies("client-session", "JSESSIONID")
.permitAll()
.and().csrf().disable()
;
}
public static void main(String[] args) {
SpringApplication.run(App1Application.class, args);
}
}