AWS Cognito Angular SpringBoot Oauth2 - ошибка invalid_token

мы используем AWS Cognito для Oauth2. Наш пользовательский интерфейс построен на Angular. После того, как мой пользователь входит в систему, я вызываю Cognito для получения токена авторизации. Я использую грант кода авторизации с PKCE для получения токена от Cognito. После получения токена от Cognito я вызываю свою службу Spring Boot REST. При вызове службы Spring Boot из Angular я отправляю токен в заголовке авторизации как токен-носитель.

Вот мой ResourceServerConfiguration.java:

import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;

@Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
    private static final String RESOURCE_ID = "resource-server-rest-api";
    private static final String SECURED_READ_SCOPE = "#oauth2.hasScope('openid')";
    private static final String SECURED_WRITE_SCOPE = "#oauth2.hasScope('openid')";
    private static final String SECURED_PATTERN = "/**";
    @Override
    public void configure(ResourceServerSecurityConfigurer resources) {
        resources.resourceId(RESOURCE_ID);
    }
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.requestMatchers()
                .antMatchers(SECURED_PATTERN).and().authorizeRequests()
                .antMatchers(HttpMethod.POST, SECURED_PATTERN).access(SECURED_WRITE_SCOPE)
                .anyRequest().access(SECURED_READ_SCOPE);
    }
}

При вызове службы REST мой пользовательский интерфейс Angular получает HTTP-ответ 401 со следующим сообщением об ошибке:

DEBUG o.s.s.o.p.a.OAuth2AuthenticationProcessingFilter - Authentication request failed: error = "invalid_token", error_description = "Invalid access token: eyJraWQiOiIy.......
  1. Есть идеи, почему я получаю invalid_token?
  2. Обращается ли Spring к Cognito для проверки токена?
  3. Я НЕ храню токен на своем уровне обслуживания REST. Это обязательно?
  4. Я включил DEBUG, используя logging.level.root = DEBUG. Но я не вижу в выводе описательного сообщения. Как мне решить эту проблему?

Заранее благодарим за любую помощь в решении этой проблемы.

Есть ли удача с исправлением этого?

Ram 14.08.2019 22:38
0
1
1 102
1

Ответы 1

Приведенные ниже изменения сработали для меня

  • Удалить @EnableResourceServer

  • Добавьте ниже в свою конфигурацию безопасности Spring

 http.authorizeRequests().antMatchers(HttpMethod.OPTIONS,"**").permitAll()
            .anyRequest()
                .authenticated()
                .and().oauth2ResourceServer().jwt();
  • добавление ниже 2 зависимости к pom.xml
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-oauth2-resource-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-oauth2-jose</artifactId>
    </dependency>
  • наконец, добавьте следующие свойства в свой application.yml
    spring:
      security:
        oauth2:
          resourceserver:
            jwt:
              issuer-uri: https://cognito-idp.us-east-1.amazonaws.com/{{userpoolid}}
    com:
      ixortalk:
        security:
          jwt:
            aws:
              userPoolId: {{userpoolid}}
              region: "us-east-1"

Другие вопросы по теме