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

时间:2018-10-22 23:58:57

标签: amazon-web-services aws-sdk

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

  1. 授权类型为NONE。委托给名为fooLambda的Lambda。
  2. 授权类型为AWS_IAM

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

我正在使用AWS Node.js sdk和aws4 npm模块对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'],
}

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

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

检查邮递员生成的授权标头后,似乎授权标头具有不同的签名。所以现在的问题是:“邮递员如何生成正确的授权标头,而aws4却不是?”

2 个答案:

答案 0 :(得分:3)

使用aws4.sign函数时,必须提供请求将具有的路径。否则,签名的请求与实际发出的请求之间将不匹配,AWS会拒绝。

答案 1 :(得分:0)

1。。您必须附加以下策略 AmazonAPIGatewayInvokeFullAccess 您的用户,也许您还可以创建用户组并附加该策略。

2。 为了丢弃,创建一个无需身份验证的新方法(端点),例如:

    https://uid.execute-api.regionidentifier.amazonaws.com/test/ping

因此,我们将放弃与apigateway相关的任何问题。

一旦实现了“ ping”方法,就可以使用postman对其进行测试。

3。。确认 AWS_IAM_AUTH 在您的方法(端点)中正常工作。

因此,我发现此video对于使用auth标头测试端点很有帮助。

祝你好运,稍后再告诉我。