использование весеннего загрузочного приложения в качестве сервера ресурсов и google oauth2 в качестве сервера авторизации - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть веб-приложение, использующее angular6 для внешнего интерфейса и весеннюю загрузку для остальных API.

Мое угловое приложение работает на localhost: 4200 и может успешно пройти аутентификацию в Google, и я вижу authToken и idToken. (Я использовал angularx-social-login плагин в угловой)

Теперь я хочу использовать этот токен авторизации для защиты моего сервера api весенней загрузки, работающего на localhost: 8080.

Я пытаюсь сделать аналогично ( источник изображения ) picture Здесь клиент - мое угловое приложение, сервер ресурсов - приложение весенней загрузки, а сервер авторизации - google

.

Я пытался использовать аннотацию EnableResourceServer и много разных подходов, но, похоже, ничего не работает. Он всегда дает мне недопустимый токен, проверяя хранилище токенов в памяти, и даже не пытается проверить его с помощью Google.

Я использую один и тот же идентификатор клиента и секретный ключ для конфигурации oauth2 в приложениях Spring и Angular.

Как я могу заставить весеннее загрузочное приложение проверять токен с помощью google для каждого запроса?

Мои заявки. Свойства

server.servlet.context-path=/api

spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:file:~/h2/testdb

logging.level.org.springframework.web=TRACE
logging.level.org.springframework.security=TRACE
logging.level.org.hibernate=TRACE

security.oauth2.resource.filter-order = 3
spring.security.oauth2.client.registration.google.client-id=#google-client-id
spring.security.oauth2.client.registration.google.client-secret=#google-client-secret    
security.oauth2.resource.user-info-uri= https://www.googleapis.com/oauth2/v3/userinfo # URI of the user endpoint.

Вот мой класс конфигурации сервера ресурсов

@Configuration
@EnableResourceServer
public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter {

    private static final String RESOURCE_ID = "rest_api";

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) {
        resources.resourceId(RESOURCE_ID).stateless(false);
    }
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .requestMatcher(new RequestHeaderRequestMatcher("Authorization"))
                .authorizeRequests().anyRequest().fullyAuthenticated();
    }

    @EnableGlobalMethodSecurity(prePostEnabled = true)
    protected static class GlobalSecurityConfiguration extends GlobalMethodSecurityConfiguration {
        @Override
        protected MethodSecurityExpressionHandler createExpressionHandler() {
            return new OAuth2MethodSecurityExpressionHandler();
        }
    }
}

1 Ответ

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

Надеюсь, вы уже нашли решение. В противном случае взгляните на эту статью .

Примечание: вы объявляете ресурс с состоянием

resources.resourceId(RESOURCE_ID).stateless(false);

Вы пытались использовать его без сохранения состояния?

resources.resourceId(RESOURCE_ID).stateless(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...