在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/