【发布时间】:2021-05-29 08:28:59
【问题描述】:
我已经设置了一个带有 JWT 授权器(已内置)的 API 网关,但我无法让它接受 Twitch 生成的令牌。这是我在 AWS 中的 JWS 身份验证设置:https://i.stack.imgur.com/WR6Vi.png
我对“观众”的含义有点困惑,但我认为这必须是我的 Twitch 扩展秘密,因为这就是令牌最初签署的内容。
我尝试在https://jwt.io/ 上针对秘密验证它,它说在勾选secret base64 encoded 框后令牌是有效的。
问题是每次我尝试在标头中将它传递给 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
}
如您所见,它接收到标头和令牌就好了。 我注意到的一件事是,当我解码令牌时,没有发行者。 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-*"
]
}
}```
【问题讨论】:
标签: amazon-web-services api jwt twitch