バックエンドにラムダ関数を持つAPIゲートウェイエンドポイントを作成しました。 次に、1つのアカウントを持つCognitoのユーザープールを作成し、API Gatewayの認証者としてCognitoのユーザープールを設定しました。 APIが無許可であることがわかりました。AWS Cognito Userpoolトークンを使用してAWS Apiゲートウェイにログインする方法?
次に、AWS Cognito Javascript SDKを使用して小さなWebページを作成し、ユーザープールにログインしてアクセストークンを取得しました。私はそれを成功させることができました。ここにコードがあります。
var authenticationData = {
Username : 'username',
Password : 'test123',
};
var authenticationDetails = new AuthenticationDetails(authenticationData);
var poolData = {
UserPoolId : 'ap-southeast-2_12312', // Your user pool id here
ClientId : '434324324' // Your client id here
};
var userPool = new CognitoUserPool(poolData);
var userData = {
Username : 'username',
Pool : userPool
};
var self = this;
var cognitoUser = new CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
var tok = result.getAccessToken().getJwtToken();
console.log('access token + ' + tok);
self.setState({ token: tok });
//POTENTIAL: Region needs to be set if not already set previously elsewhere.
// AWS.config.region = '<region>';
// AWS.config.credentials = new AWS.CognitoIdentityCredentials({
// IdentityPoolId : '...', // your identity pool id here
// Logins : {
// // Change the key below according to the specific region your user pool is in.
// 'cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>' : tok
// }
// });
// Instantiate aws sdk service objects now that the credentials have been updated.
// example: var s3 = new AWS.S3();
},
onFailure: function(err) {
alert(err);
},
});
このコードは動作し、私にJWTトークンを提供します。しかし、そのトークンは私をAPIに認めるものではありません。私はBearerキーワードなしでAuthorizationヘッダーにトークンを渡していますが、まだAPIにアクセスすることはできません。どうやってやるの?
Authorizerのテストページもあります。私のJWTトークンもそこでは働いていません。 – Hash
APIコンソール内のテストは、JWTトークンの有無にかかわらず動作しています。 – Hash
はい、私はAuthorizerのテストページについて話しています。トークンがそこで動作していない場合、Logs出力を使用して問題をデバッグできるはずです。トークンの有効期限が切れるので、新しいトークンでテストしていることを確認してください。トークンは、認証者に設定した 'providerARN'と一致するユーザープールから発行する必要があります。 –