Cognito+API Gateway+LambdaでログインAPIを作りたいんだー!
前回の続きで、Cognitoを使ったユーザ認証を行う。
やりたいこと
APIでログイン
- ログイン名 と パスワードをリクエストボディに指定しAPIをコールしアクセストークンを取得する
参考
やってみよう
Lambda用IAMロール
前回同様に、Lambdaの基本的なポリシーに加えて、「AmazonCognitoPowerUser」をアタッチする。
ログイン用のLambda関数を作成
前回と異なっていた点ですが、引数に渡すUSERNAME・PASSWORDは大文字で記載しないとエラーになりました。
'use strict';
const AWS = require('aws-sdk');
const cognito = new AWS.CognitoIdentityServiceProvider();
/**
* SignIn
*/
exports.handler = async (event, context) => {
const response = {};
let loginName;
let password;
console.log(event);
// Validation
if (!(event.body) || !('loginName' in JSON.parse(event.body)) || !('password' in JSON.parse(event.body))) {
response["statusCode"] = 400;
return response;
} else {
let reqestBody = JSON.parse(event.body);
loginName = reqestBody["loginName"];
password = reqestBody["password"];
}
// SignIn parameters
const params = {
AuthFlow: 'USER_PASSWORD_AUTH',
ClientId: process.env['APP_CLIENT_ID'],
AuthParameters: {
USERNAME : loginName,
PASSWORD: password
}
};
response["headers"] = {"Access-Control-Allow-Origin" : "*", "Content-Type" : "application/json"};
// SignIn
try {
const result = await cognito.initiateAuth(params).promise();
console.log('User sign in success!!!', JSON.stringify(result, null, 4));
response["statusCode"] = 200;
response["body"] = JSON.stringify(result['AuthenticationResult']);
return response;
}
catch(err) {
console.log('User sign in failed...' + err);
if ((err.code == 'NotAuthorizedException') || (err.code == 'UserNotConfirmedException')) {
response["statusCode"] = 400;
} else {
response["statusCode"] = 500;
}
return response;
}
};
API Gateway リソース・メソッドの追加
前回同様、「Lambdaプロキシの統合」にチェックを入れ、作成したLambda関数を選択する。
無事にアクセストークンが取得できたので、目的達成!!!
感想
レスポンスの有効期限(expired)が3600なのでん?と思ったら、アクセストークン・IDトークンの有効期限は1時間固定のよう。
変更できないのか?? 調べておきます。
アプリクライアントの設定で指定したトークンの有効期限はリフレッシュトークンの有効期限のことである。
今後の宿題
- ユーザ情報を取得する
Author And Source
この問題について(Cognito+API Gateway+LambdaでログインAPIを作りたいんだー!), 我々は、より多くの情報をここで見つけました https://qiita.com/seobomi/items/5dd1db15a7c81675aacf著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .