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

  • 授权类型为NONE。委托(delegate)给一个名为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'],
    }
    

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

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

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

    最佳答案

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

    关于amazon-web-services - 从临时凭证正确生成AWS auth header ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52939247/

    10-10 14:56
    查看更多