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 服务有关算法类型的信息它应该用于验证令牌。

有两种处理方法:

  1. 让 AWS 服务了解令牌创建时使用的算法,以便 AWS 身份验证服务使用相同的算法来 verify/validate 令牌。

  2. 如果服务允许,请更改令牌发行者服务端的算法。

通常令牌发行者在创建 JWT 令牌时使用以下算法之一

HS256HS384HS512RS256RS384RS512ES256ES384ES512 PS256 PS384 PS512 EdDSA

令牌中的观众声明

aud(听众):JWT 的目标接收者。

AWS 如何知道 Twitch 是发行者?

您已经提到了 AWS 中的 JWS 身份验证设置。