在AWS Cognito生成的error JWT时,我们突然开始低于decoding
Spring Security JWT

{
    "error": "access_denied",
    "error_description": "Invalid token does not contain resource id (oauth2-resource)"
}


我们使用的是Spring Boot版本:2.0.3.RELEASE

这更特定于AWS Cognito生成的令牌,以及为什么它突然停止工作而代码库/ spring lib或基础架构未发生更改



最近更新 :
似乎AWS已在解码后的JWT下方还原了thr更改(添加了'aud声明)

今天(2019年10月16日)智威汤逊

 {
    "sub": "XXXXXXXXXXXX-6a8dd388a720",
    "token_use": "access",
    "scope": "XXXXXXXXXXXX",
    "auth_time": 1571227222,
    "iss": "YYYYYYYYYYYYYYYY",
    "exp": 1571230822,
    "iat": 1571227222,
    "version": 2,
    "jti": "XXXXXXXXXXXXXYYYYYYYYYYYYY",
    "client_id": "someclient_id",
    "username": "someusername"
     }


昨天我们得到:

  {
  "sub": "xxxxxxxxxxxxx",
  **"aud": "sameasclientid",**
  "token_use": "access",
  "scope": "somescope",
  "auth_time": 1571132619,
  "iss": "rrrrrrrrrrrrrrrrrrrrr",
  "exp": 1571136219,
  "iat": 1571132619,
  "version": 2,
  "jti": "xxxxxxxxxxxxxxxxx",
  "client_id": "sameasclientid",
  "username": "someusername"
 }

最佳答案

我们使用SO链接here解决了这个问题。

似乎AWS Cognito生成的令牌现在正在向令牌添加新的声明aud。 Spring OAuth期望JWT令牌中的aud声明默认情况下为oauth2-resource

解决方法是在Spring Resource Server配置的JWT令牌中添加aud,其值为client_id

  @Value("${security.oauth2.resource.id:}")
  private String jwtAudResourceId;

  @Override
  public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
    resources.resourceId(jwtAudResourceId);
  }


有关有关CWT中的JWT声明的信息,请参见here



更新



似乎AWS已还原了在JWT令牌中添加“ aud”声明的更改。
我们不再在JWT中收到“ aud”要求

我们昨天(2019年10月15日)收到的经过解码的JWT

{
  "sub": "XXXXXXXXXXXXXXXXX",
  "aud": "SAME_AS_CLIENT_ID",
  "token_use": "access",
  "scope": "SOMESCOPE",
  "auth_time": 1571132619,
  "iss": "SOME_ISSUER",
  "exp": 1571136219,
  "iat": 1571132619,
  "version": 2,
  "jti": "8XXXXXXXXXXXXXXXX",
  "client_id": "SAME_AS_CLIENT_ID",
  "username": "SOME_USERNAME"
}


我们今天要解码的JWT(2019年10月16日

{
  "sub": "XXXXXXXXXXXXXXXXX",
  "token_use": "access",
  "scope": "SOMESCOPE",
  "auth_time": 1571227222,
  "iss": "SOME_ISSUER",
  "exp": 1571230822,
  "iat": 1571227222,
  "version": 2,
  "jti": "8XXXXXXXXXXXXXXXX",
  "client_id": "SAME_AS_CLIENT_ID",
  "username": "SOME_USERNAME"
}


所以现在即使它不按如下配置它也应该可以工作,或者从配置类中删除以下代码段:

@Override
public void configure(ResourceServerSecurityConfigurer config) throws
Exception {
    config.resourceId(null).tokenServices(tokenServices());
}

关于java - 在Spring Security中解码AWS Cognito生成的JWT时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58393715/

10-14 10:40