AWS Api 网关 JWT 授权 - 出现 'Signing method HS256 is invalid' 错误
AWS Api Gateway JWT Authorization - Getting 'Signing method HS256 is invalid' Error
我已经设置了一个带有 JWT 授权器(已经内置)的 API 网关,但我无法让它接受 Twitch 生成的令牌。这是我在 AWS 中的 JWS 身份验证设置:https://i.stack.imgur.com/WR6Vi.png
我对 'audience' 的含义有点困惑,但我认为这必须是我的 Twitch 扩展秘密,因为这是令牌首先签名的内容。
我尝试在 https://jwt.io/ 上根据秘密验证它,它说在勾选 secret base64 encoded
框后令牌有效。
问题是每次我尝试将它从 header 传递到 API 时,我都会得到 error="invalid_token" error_description="signing method HS256 is invalid"
.
这是 AWS 收到的负载:
version: '2.0',
routeKey: '$default',
rawPath: '/',
rawQueryString: '',
headers: {
accept: '*/*',
'accept-encoding': 'deflate, gzip',
'authorization': 'Bearer <MYTOKEN>',
'content-length': '0',
host: '<SOMETHING>.us-west-2.amazonaws.com',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36',
'x-amzn-trace-id': '<SOME ID>',
'x-forwarded-for': '<SOME IP>',
'x-forwarded-port': '443',
'x-forwarded-proto': 'https',
'x-real-ip': '<SOME IP>'
},
requestContext: {
accountId: '<ID>',
apiId: '<APP ID>',
domainName: '<SOMETHING>.us-west-2.amazonaws.com',
domainPrefix: '<SOMETHING>',
http: {
method: 'GET',
path: '/',
protocol: 'HTTP/1.1',
sourceIp: '<SOME IP>',
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'
},
requestId: '<SOME ID>',
routeKey: '$default',
stage: '$default',
time: '26/Feb/2021:17:48:04 +0000',
timeEpoch: 1614361684261
},
isBase64Encoded: false
}
如您所见,它很好地接收了 header 和令牌。
我注意到的一件事是,当我解码令牌时,没有发行者。 AWS 如何知道 Twitch 是发行者?
"alg": "HS256",
"typ": "JWT"
}
{
"exp": 1614341073,
"opaque_user_id": "U<SOME ID>",
"user_id": "<SOME ID>",
"channel_id": "<SOME ID>",
"role": "broadcaster",
"is_unlinked": false,
"pubsub_perms": {
"listen": [
"broadcast",
"whisper-<SOME ID>",
"global"
],
"send": [
"broadcast",
"whisper-*"
]
}
}```
根据异常 error="invalid_token" error_description="signing method HS256 is invalid"
,很明显 AWS 服务不支持此算法 HS256
或者您必须更改配置以告知 AWS 服务有关算法类型的信息它应该用于验证令牌。
有两种处理方法:
让 AWS 服务了解令牌创建时使用的算法,以便 AWS 身份验证服务使用相同的算法来 verify/validate 令牌。
如果服务允许,请更改令牌发行者服务端的算法。
通常令牌发行者在创建 JWT 令牌时使用以下算法之一
HS256
HS384
HS512
RS256
RS384
RS512
ES256
ES384
ES512
PS256
PS384
PS512
EdDSA
令牌中的观众声明
aud(听众):JWT 的目标接收者。
AWS 如何知道 Twitch 是发行者?
您已经提到了 AWS 中的 JWS 身份验证设置。
我已经设置了一个带有 JWT 授权器(已经内置)的 API 网关,但我无法让它接受 Twitch 生成的令牌。这是我在 AWS 中的 JWS 身份验证设置:https://i.stack.imgur.com/WR6Vi.png
我对 'audience' 的含义有点困惑,但我认为这必须是我的 Twitch 扩展秘密,因为这是令牌首先签名的内容。
我尝试在 https://jwt.io/ 上根据秘密验证它,它说在勾选 secret base64 encoded
框后令牌有效。
问题是每次我尝试将它从 header 传递到 API 时,我都会得到 error="invalid_token" error_description="signing method HS256 is invalid"
.
这是 AWS 收到的负载:
version: '2.0',
routeKey: '$default',
rawPath: '/',
rawQueryString: '',
headers: {
accept: '*/*',
'accept-encoding': 'deflate, gzip',
'authorization': 'Bearer <MYTOKEN>',
'content-length': '0',
host: '<SOMETHING>.us-west-2.amazonaws.com',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36',
'x-amzn-trace-id': '<SOME ID>',
'x-forwarded-for': '<SOME IP>',
'x-forwarded-port': '443',
'x-forwarded-proto': 'https',
'x-real-ip': '<SOME IP>'
},
requestContext: {
accountId: '<ID>',
apiId: '<APP ID>',
domainName: '<SOMETHING>.us-west-2.amazonaws.com',
domainPrefix: '<SOMETHING>',
http: {
method: 'GET',
path: '/',
protocol: 'HTTP/1.1',
sourceIp: '<SOME IP>',
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'
},
requestId: '<SOME ID>',
routeKey: '$default',
stage: '$default',
time: '26/Feb/2021:17:48:04 +0000',
timeEpoch: 1614361684261
},
isBase64Encoded: false
}
如您所见,它很好地接收了 header 和令牌。 我注意到的一件事是,当我解码令牌时,没有发行者。 AWS 如何知道 Twitch 是发行者?
"alg": "HS256",
"typ": "JWT"
}
{
"exp": 1614341073,
"opaque_user_id": "U<SOME ID>",
"user_id": "<SOME ID>",
"channel_id": "<SOME ID>",
"role": "broadcaster",
"is_unlinked": false,
"pubsub_perms": {
"listen": [
"broadcast",
"whisper-<SOME ID>",
"global"
],
"send": [
"broadcast",
"whisper-*"
]
}
}```
根据异常 error="invalid_token" error_description="signing method HS256 is invalid"
,很明显 AWS 服务不支持此算法 HS256
或者您必须更改配置以告知 AWS 服务有关算法类型的信息它应该用于验证令牌。
有两种处理方法:
让 AWS 服务了解令牌创建时使用的算法,以便 AWS 身份验证服务使用相同的算法来 verify/validate 令牌。
如果服务允许,请更改令牌发行者服务端的算法。
通常令牌发行者在创建 JWT 令牌时使用以下算法之一
HS256
HS384
HS512
RS256
RS384
RS512
ES256
ES384
ES512
PS256
PS384
PS512
EdDSA
令牌中的观众声明
aud(听众):JWT 的目标接收者。
AWS 如何知道 Twitch 是发行者?
您已经提到了 AWS 中的 JWS 身份验证设置。