是否可以验证AWS4-HMAC-SHA256签名?

问题描述 投票:0回答:1

我有一个独特的案例。我正在构建一个代理并想验证 AWS4 签名。

例如:

ServiceA 分配有 RoleA,并且正在向 ProxyService 发出请求。 我想使用 amazon HTTP 标头验证该请求实际上来自 ServiceA。 需要注意的是,我确实拥有 ProxyService 的权限来承担 RoleA 的角色。

可以使用我拥有的秘密访问密钥重新计算签名。 我的问题是,当使用 IAM 角色时,ServiceA 使用临时凭证,因此当使用 ProxyService 的 STS api 请求凭证时,我实际上得到了不同的凭证。

当我不需要对 ServiceA 进行代码更改时,我想创建一个解决方案

amazon-web-services amazon-iam sts hmacsha256
1个回答
0
投票

HMAC 算法是对称的,因此可用于同时验证数据完整性和消息的真实性。查看签名过程的文档:https://docs.aws.amazon.com/IAM/latest/UserGuide/create-signed-request.html 计算过程是这样的:

HMAC(HMAC(HMAC(HMAC("AWS4" + kSecret,"20230830"),"us-east-2"),"iam"),"aws4_request")

所以要计算签名,可以使用javascript代码,例如:

var secret = "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY";
var date = "20230830";
var region = "us-east-2";
var service = "iam";

var kdate = CryptoJS.HmacSHA256(date, "AWS4" + secret);
var kregion = CryptoJS.HmacSHA256(region, kdate);
var kservice = CryptoJS.HmacSHA256(service, kregion);
var ksigning = CryptoJS.HmacSHA256("aws4_request", kservice);

var hashInHex = CryptoJS.enc.Hex.stringify(ksigning);
console.log(hashInHex);
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/hmac-sha256.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/enc-base64-min.js"></script>

© www.soinside.com 2019 - 2024. All rights reserved.