AWS-amplify在请求中包含cognito Authorization标头

时间:2018-06-01 14:01:52

标签: react-native aws-lambda aws-sdk amazon-cognito aws-amplify

我创建了一个包含Cognito和Cloud逻辑的AWS移动中心项目。在我的API网关中,我为授权者设置了Cognito用户池。我使用React native作为我的客户端应用程序。如何将Authorization标头添加到我的API请求中。

const request = {
  body: {
    attr: value
  }
};

API.post(apiName, path, request)
  .then(response => {
  // Add your code here
    console.log(response);
  })
  .catch(error => {
    console.log(error);
  });
};

1 个答案:

答案 0 :(得分:8)

默认情况下,aws-amplify的API模块会尝试签名请求。如果您的授权人类型为AWS_IAM,这非常有用。

使用Cognito用户池授权程序时,这显然是。在这种情况下,您需要传递Authorization标头中的id_token,而不是sig4签名。

今天,您确实可以通过Authorization标头进行放大,it will no longer overwrite it with the sig4 signature

在您的情况下,您只需要将headers对象添加到request对象。例如:

async function callApi() {

    // You may have saved off the JWT somewhere when the user logged in.
    // If not, get the token from aws-amplify:
    const user = await Auth.currentAuthenticatedUser();
    const token = user.signInUserSession.idToken.jwtToken;

    const request = {
        body: {
            attr: "value"
        },
        headers: {
            Authorization: token
        }
    };

    var response = await API.post(apiName, path, request)
        .catch(error => {
            console.log(error);
        });

    document.getElementById('output-container').innerHTML = JSON.stringify(response);
}

使用aws-amplify 0.4.1。

进行测试