簡體   English   中英

AWS Cognito Angular SpringBoot Oauth2-invalid_token錯誤

[英]AWS Cognito Angular SpringBoot Oauth2 - invalid_token error

我們將AWS Cognito用於Oauth2。 我們的用戶界面基於Angular構建。 用戶登錄后,我發起對Cognito的調用以獲取授權令牌。 我正在將PKCE中的授權代碼授予用於從Cognito獲得令牌。 從Cognito獲得幫助之后,我給自己的Spring Boot REST服務打電話。 從Angular調用Spring Boot服務時,我將授權標頭中的令牌作為“承載者”令牌發送。

這是我的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 UI會收到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. 我使用logging.level.root = DEBUG啟用了DEBUG。 但是我在輸出中看不到描述性消息。 我該如何解決這個問題?

在此先感謝您為解決此問題提供的任何幫助。

以下更改對我有用

  • 刪除@EnableResourceServer

  • 將以下內容添加到您的spring安全配置中

 http.authorizeRequests().antMatchers(HttpMethod.OPTIONS,"**").permitAll()
            .anyRequest()
                .authenticated()
                .and().oauth2ResourceServer().jwt();
  • 在pom.xml中添加以下2個依賴項
    <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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM