我有一个具有两个端点的API网关:
NONE
。委托给名为fooLambda
的Lambda。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却不是?”
答案 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标头测试端点很有帮助。
祝你好运,稍后再告诉我。