Выйдите из клиента thymeleaf, когда мы используем oauth2 - PullRequest
0 голосов
/ 28 мая 2019

У меня есть 3 приложения, одно для авторизации, одно с ресурсом (api rest) и один клиент в тимелине, который потребляет остальные.

Когда я выхожу из своего клиента, это не похоже на реальный выход из системы, потому что когда я нажимаю на кнопку «Войти», это входит в систему непосредственно для меня ... используйте предыдущего пользователя.

Я взял пример Baeldung, который похож на мой и имеет ту же проблему.

Сервер авторизации https://github.com/Baeldung/spring-security-oauth/tree/master/oauth-authorization-server

Ресурсный сервер https://github.com/Baeldung/spring-security-oauth/tree/master/oauth-resource-server-1

клиент Thymeleaf https://github.com/Baeldung/spring-security-oauth/tree/master/clients-thymeleaf/oauth-ui-authorization-code-thymeleaf

На сервере авторизации у меня

@Controller
public class TokenController {

    @Resource(name = "tokenServices")
    private ConsumerTokenServices tokenServices;

    @Resource(name = "tokenStore")
    private TokenStore tokenStore;

    @RequestMapping(method = RequestMethod.POST, value = "/oauth/token/revokeById/{tokenId}")
    @ResponseBody
    public void revokeToken(HttpServletRequest request, @PathVariable String tokenId) {
        tokenServices.revokeToken(tokenId);
    }

    @RequestMapping(method = RequestMethod.GET, value = "/tokens")
    @ResponseBody
    public List<String> getTokens() {
        Collection<OAuth2AccessToken> tokens = tokenStore.findTokensByClientId("sampleClientId");
        return Optional.ofNullable(tokens).orElse(Collections.emptyList()).stream().map(OAuth2AccessToken::getValue).collect(Collectors.toList());
    }

    @RequestMapping(method = RequestMethod.POST, value = "/tokens/revokeRefreshToken/{tokenId:.*}")
    @ResponseBody
    public String revokeRefreshToken(@PathVariable String tokenId) {
        if (tokenStore instanceof JdbcTokenStore) {
            ((JdbcTokenStore) tokenStore).removeRefreshToken(tokenId);
        }
        return tokenId;
    }

}

В клиенте тимелина у меня есть

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

    @Bean
    public RestTemplate restTemplate(OAuth2AuthorizedClientService clientService) {
        RestTemplate restTemplate = new RestTemplate();
        List<ClientHttpRequestInterceptor> interceptors = restTemplate.getInterceptors();
        if (CollectionUtils.isEmpty(interceptors)) {
            interceptors = new ArrayList<>();
        }
        interceptors.add(new AuthorizationHeaderInterceptor(clientService));
        restTemplate.setInterceptors(interceptors);
        return restTemplate;
    }

}

Как действительно выйти из тимелина (токен обязательно должен быть удален?)

1 Ответ

0 голосов
/ 28 мая 2019

«Безопасность» должна быть на каждом уровне в ваших приложениях.Но я предполагаю, что под вашим постом вы подразумеваете слой аутентификации.

Если вы не хотите, чтобы ваш REST API был доступен для использования всеми, вы должны добавить к нему слой аутентификации и, по крайней мере, политику CORS.,Вспомните ключи API, OAuth или обычную аутентификацию по имени пользователя и паролю.

...