问题描述
我已经设置了一个带有 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>',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-*"
]
}
}```
解决方法
根据例外 apoc.create.relationship()
,很明显 AWS 服务不支持此算法 USING PERIODIC COMMIT 500 LOAD CSV
WITH HEADERS FROM "http://neo4j.com/docs/2.2.2/csv/import/roles.csv" AS csvLine
MATCH (person:Person { id: toInt(csvLine.personId)}),(movie:Movie { id: toInt(csvLine.movieId)})
WITH person,movie,csvLine
CALL apoc.create.relationship(person,csvLine.role,{role: csvLine.role},movie) YIELD rel
RETURN *
或者您必须更改配置以通知 AWS 服务它应该使用的算法类型用于验证令牌。
进行此操作的两种方法:
-
让 AWS 服务了解令牌创建时使用的算法,以便 AWS 身份验证服务使用相同的算法来验证/验证令牌。
-
如果服务允许,请更改令牌颁发者服务端的算法。
通常令牌发行者在创建 JWT 令牌时使用以下算法之一
error="invalid_token" error_description="signing method HS256 is invalid"
HS256
HS256
HS384
HS512
RS256
RS384
RS512
ES256
{{ 1}} ES384
ES512
PS256
令牌中的受众声明
aud(受众):JWT 的目标接收者。
AWS 如何知道 Twitch 是发行人?
您已经提到了 AWS 中的 JWS 身份验证设置。