从临时凭证正确生成AWS auth标头

Oge*_*gen 9 amazon-web-services aws-sdk

我有一个有两个端点的API网关:

  1. 授权类型是NONE.代表一个名为lambda的人fooLambda.
  2. 授权类型是AWS_IAM.

客户端应该调用端点1以从中获取凭据,fooLambda以便它们可以成功调用端点2.

我正在使用AWS Node.js sdk和aws4npm模块来签署aws请求.这是我的一些伪代码fooLambda:

// get the role using this...
STS.assumeRole({
    RoleArn: 'arn of my role that can call endpoint 2',
    RoleSessionName: 'foobar',
})

// parse the sts creds like this....
const stsCredentials = STS.credentialsFrom(assumeRoleResponse)

// get a collection of signed headers like so
const signedHeaders = aws4.sign({
    service: 'execute-api',
    region: process.env.REGION,
}, {
    secretAccessKey: stsCredentials.secretAccessKey,
    accessKeyId: stsCredentials.accessKeyId,
    sessionToken: stsCredentials.sessionToken,
}).headers;

// return the following headers to the client
return {
    authorizationHeader: signedHeaders['Authorization'],
    stsSecurityToken: signedHeaders['X-Amz-Security-Token'],
}
Run Code Online (Sandbox Code Playgroud)

现在我的意图是客户端可以将这两个标头附加到他们的请求,以便他们可以成功调用端点2,但我收到一个错误,说安全令牌无效,但我不知道为什么.

更新:当我使用Postman的AWS签名授权类型并提供我的accessKey,secretKey,aws区域,服务名称和会话令牌参数时 - 它会创建授权标头,并且对端点2的请求成功!

在检查邮递员生成的授权标头之后,似乎Authorization标头具有不同的签名.所以现在问题是:"邮递员如何生成正确的授权标头,但aws4不是?"

Oge*_*gen 3

使用该aws4.sign函数时,您必须提供请求的路径。否则,签名的请求与实际发出的请求之间存在不匹配,AWS 将出现错误。