Как я могу получить OAuth2AccessToken с Spring-Boot? - PullRequest
0 голосов
/ 05 февраля 2020

Я использую Spring-Boot и Spring Security с входом OAuth2 от третьей стороны.

У поставщика единого входа есть конечная точка маркера доступа, которая возвращает следующее JSON

{
    "access_token": "CGjok",
    "refresh_token": "TSHO6E",
    "scope": "openid profile ",
    "id_token": "eyJ0eXAiOiJKV1QiLCg",
    "token_type": "Bearer",
    "expires_in": 7199,
    "nonce": "ImplicitFlowTest"
}

Имя входа работает с аннотацией @ EnableOAuth2Sso следующим образом:

@EnableOAuth2Sso
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {


        http.authorizeRequests().antMatchers("/restapi/**").hasAuthority("Mitarbeiter")
            .antMatchers("/login", "/static/**", "/", "/actuator/prometheus","/error**","/logout").permitAll()
            .and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).invalidateHttpSession(true)
            .deleteCookies("SMSESSION", "JSESSIONID", "XSRF-TOKEN").logoutSuccessUrl("/");

           http
           // CSRF Token
           .csrf()
               .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());

    }  

Мы можем выйти из приложения, но мы также хотим отправить запрос на сервер авторизации. Для этого мне нужно получить доступ к конечной точке информации токена.

В моих контроллерах я вижу, что Принципал получает правильную информацию от конечной точки пользователя, но где в Spring Boot хранится информация от конечной точки accessToken. Я нашел класс OAuth2AccessToken, но не могу понять, как его читать в Spring Controller. Я могу получить доступ к OAuth2Authentication, приведя Принципала, как ожидалось.

Сервер авторизации единого входа имеет следующую конечную точку, которую мне нужно вызвать:

/oauth2/connect/endSession?id_token_hint=<oidc-token>&post_logout_redirect_uri=<post-logout-redirect-uri>

Ссылка на значение в JSON от конечной точки маркера доступа. Как я могу получить доступ к этим значениям при моей настройке?

1 Ответ

0 голосов
/ 05 февраля 2020

Чтение значения токена из контекста безопасности

        String tokenValue = null;

        final Authentication authenticationObject = SecurityContextHolder.getContext().getAuthentication();
        if (authenticationObject != null) {
            final Object detailObject = authenticationObject.getDetails();
            if (detailObject instanceof OAuth2AuthenticationDetails) {
                final OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) detailObject;
                tokenValue = details.getTokenValue();
            } else if (detailObject instanceof OAuth2AccessToken) {
                final OAuth2AccessToken token = (OAuth2AccessToken) detailObject;
                tokenValue = token.getValue();
            } else {
                tokenValue = null;
            }

        }
...