web-dev-qa-db-ja.com

AWS-amplifyリクエストにcognito Authorizationヘッダーを含める

CognitoおよびCloudロジックを含むAWSモバイルハブプロジェクトを作成しました。私のAPIゲートウェイでは、承認者用のCognitoユーザープールを設定しました。 Reactネイティブをクライアント側アプリとして使用しています。APIリクエストにAuthorizationヘッダーを追加するにはどうすればよいですか?.

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

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

デフォルトでは、aws-amplifyのAPIモジュールはsig4署名リクエストを試行します。オーソライザタイプがAWS_IAMの場合、これは最適です。

これは明らかにCognitoユーザープール認証を使用するときに必要なではありません。この場合、sig4署名の代わりに、Authorizationヘッダーでid_tokenを渡す必要があります。

今日、実際にAuthorizationヘッダーを渡して増幅することができます これにより、sig4署名で上書きされなくなります


あなたの場合、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を使用してテスト済み。

14
Mike Patrick