【发布时间】:2019-09-18 00:18:07
【问题描述】:
我们有一个无服务器后端,受 API Gateway 中的 IAM 保护。我们有另一个内部身份验证解决方案,我们希望在我们的服务中支持这两种身份验证机制。我正计划编写一个具有支持多个身份验证的身份验证链的自定义授权器。
但是,我找不到任何方法来验证后端的 AWS Sigv4 签名。我找到了关于如何签署请求或计算 Sigv4 签名([1]、[2]、[3] 和 [4])的 AWS 文档,但是所有这些文档都是从客户端的角度来看的,其中客户端可以访问 ACCESS_KEY_ID、SECRET_ACCESS_KEY和 SESSION_TOKEN。当自定义授权器 lambda 将收到请求时,它将只有 ACCESS_KEY_ID(在 Authorization 标头中)和 SESSION_TOKEN(作为附加标头)。因此,无法在后端重新计算签名。如何在后端验证签名以进行身份验证?
此帖子可能与 How to verify AWS SigV4 signing 重复,但仍未得到答复。 Solution suggested 在这个问题中仍然需要 SECRET_ACCESS_KEY。
[1]https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html
[2]https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-examples-using-sdks.html
[3]https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html
[4]https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html
【问题讨论】:
-
作为签名过程的一部分,密钥被输入到 hmac 算法中。要进行验证,必须重新运行签名过程并验证签名匹配。如果没有密钥,您将无法执行此操作。
-
您知道 API Gateway 是如何做到的吗?它以某种方式验证了签名,对吧?
-
它必须在某种程度上可以访问密钥,可能通过将请求传递给具有该信息但永远无法返回它的组件来完成,只是验证签名(并返回它计算 .. 因为 AWS 发回的错误消息将包括它的预期签名)
标签: amazon-web-services aws-sdk aws-api-gateway amazon-iam