【问题标题】:AWS Api Gateway JWT Authorization - Getting 'Signing method HS256 is invalid' ErrorAWS Api Gateway JWT 授权 - 获取“签名方法 HS256 无效”错误
【发布时间】: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


    【解决方案1】:

    根据异常error="invalid_token" error_description="signing method HS256 is invalid",很明显,AWS 服务不支持此算法HS256,或者您必须更改配置以告知 AWS 服务它应该使用的算法类型,以便验证令牌。

    两种方法:

    1. 让 AWS 服务在创建令牌时通知正在使用的算法,以便 AWS 身份验证服务使用相同的算法来验证/验证令牌。

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

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

    HS384 HS512 987654326 RS384 987654328 ES256 987654330 @ ES512 987654332 PS384 987654334 EdDSA

    令牌中的受众声明

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

    AWS 如何知道 Twitch 是发行者?

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

    【讨论】:

    • 我完全错过了 AWS 文档中的部分,即他们的 JWT 身份验证只接受基于 RSA 的算法。谢谢,我会尝试找到不同的方法!
    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2018-02-21
    • 2022-10-18
    • 2021-03-23
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多