サインインしてトークンを取得したら、これらのトークンを使用して API Gateway 上の保護された API へのアクセスすることができます。
[id_token を利用した Cognito オーソライザーが有効化されている API があることを確認してください。オーソライザー設定から OAuth スコープを削除します。完了したら、本番ステージにデプロイします。]
API を呼び出して結果をレンダリングするための html レイアウトを追加します。
<div id="callapis" class="w3-container w3-padding-large w3-grey tab" style="display:none">
<button type="submit" class="w3-button w3-black w3-margin-bottom" onclick="callAPIGW()">Call APIGW</button>
<div class="w3-section">
<pre class="" id="apiresponse"></pre>
</div>
</div>
/**
* Call protected APIGW endpoint
*
*Important:
*Make sure apigw cognito authorizer configuration is complete
*Make sure api accepts id-token (no oauth scope defined in authorization)
*You can only use id-token since custom scopes are not supported when sdk is used
*/
function callAPIGW(){
apiGatewayUrl = "__TYPE_YOUR_API_GATEWAY_ENDPOINT_URL__";
// set ID Token in "Authorization" header
const headers = {
'Content-Type': 'application/json',
'Authorization': cognitoUser.signInUserSession.idToken.jwtToken
}
axios.get(apiGatewayUrl, { headers: headers }).then((response) => {
console.log(response.data);
$("#apiresponse").html('<b>Response</b><br>'+JSON.stringify(response.data,null, 2));
}).catch(function (error) {
console.error(error);
});
}
API の呼び出しをテストできるようになりました。サインインして Cognitoからトークンを取得したら、Call APIs タブに移動して Call APIGW ボタンをクリックします。
::alert[CORS エラーを受け取った場合は、200 と 401 のレスポンスコードの両方で「Access-Control-Allow-Origin」ヘッダーを返すように API が設定されていることを確認してください (トークンが無効、期限切れ、または見つからない場合は 401 を受け取ります)。]