【问题标题】:Is there a .NET library that can sign a request with AWS V4 Signature?是否有可以使用 AWS V4 签名对请求进行签名的 .NET 库?
【发布时间】:2023-03-25 03:35:01
【问题描述】:

我有一个 API 网关,我在其中将身份验证设置为使用 AWS_IAM。这要求我使用 AWS V4 签名对每个请求进行签名,并在标头中附加 HMAC。我在 nodejs 中找到了使用 V4 签名对请求进行签名的库。但是我找不到可以为我签名的图书馆。甚至 .NET 的 aws-sdk 也针对他们自己的特定用例进行了抽象。那里有图书馆吗(我做了一个快速的谷歌搜索并没有找到结果)?还是我需要自己写出hmac?

【问题讨论】:

标签: .net amazon-web-services aws-sdk aws-api-gateway aws-lambda


【解决方案1】:

您可以阅读签名是如何完成的,并且可以(如果您愿意)。 我建议引入适用于 .NET 的 AWS 开发工具包并使用开发工具包中的功能来实际执行签名。

这里是 SDK 的签名者:

https://github.com/aws/aws-sdk-net/blob/6c3be79bdafd5bfff1ab0bf5fec17abc66c7b516/sdk/src/Core/Amazon.Runtime/Internal/Auth/AWS4Signer.cs

您可能需要对其进行调整(即默认情况下它知道 AWS 服务和端点)

【讨论】:

  • 他们的库将加快这个过程,但我仍然必须将标准 HttpRequestMessage 硬塞到他们的 IRequest 格式中,或者至少编写一个包装器来返回类似的参数。
  • 我们(API 网关)意识到官方 .NET SDK 支持的必要性,并相应地进行了优先排序。同时,我建议按照@Mircea 的建议,或者 1)按照docs.aws.amazon.com/general/latest/gr/sigv4_signing.html 实施您自己的签名者,或者 2)重复使用现有 .NET AWS SDK 的片段
  • 嗨,我是这个库的合著者,可以接受请求或反馈。
【解决方案2】:

虽然这是一个老问题,但由于 AWS 并没有像他们上面的评论中所说的那样对 .NET AWS 开发工具包进行“相应的优先级排序”,而且这在今天仍然是一个相关问题,我找到了一个很好的库来处理为您签名的 AWS V4 请求。

Here is the Nuget package.

Here is the GitHub source and implementation documentation.

此外,我发现要让我的 API Gateway AWS_IAM 授权使用临时安全凭证,您还需要在当前会话令牌中包含“x-amz-security-token”标头,因为它也是值在您的要求中。

【讨论】:

    【解决方案3】:

    Aws4RequestSigner 的替代品是AwsSignatureVersion4。我认为它的 API 更易于使用,但由于我是后者的作者,所以我有偏见。

    【讨论】:

    • 您好,我正在使用 AWS elasticsearch 并希望签署请求。我正在使用 asp .net elasticsearch NEST sdk,想知道您的 AwsSignatureVersion4 是否可以使用它? var client = new ElasticClient(settings);
    • 其实我也不知道,但试试会很有趣!你能用示例代码创建一个 GitHub 存储库,我们可以看看我们是否可以一起工作?
    • 我有一个 IAM 安全 API 网关阶段,并希望使用 lambda 函数的 IAM 角色从 lambda 函数向它发出请求,我想知道是否可以使用这些库中的任何一个来做到这一点?任何指导将不胜感激,因为我目前不知道如何做到这一点。谢谢。
    • AWS IAM 角色不是设置为 Lambda 函数上的环境变量吗?在这种情况下,您应该能够在使用 AwsSignatureVersion4 的请求中使用它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多