すべて!NodeJSを使用してRESTサービスからユーザーを認証するAWS Cognito SDKの使用方法
私は現在、ClaudiaJS + Claudia-API-Builderを使用して構築され、APIゲートウェイで「/ api/auth」で公開されたラムダ関数を使用して、Cognito UserPoolからユーザーを認証する際に問題に直面しています。私はcognitoUser.authenticateUser
を呼び出すことに成功する方法を見つけることができないようです。
私が今までに見つけたすべてのリソースは、このAPIをブラウザ経由で呼び出すためのものですが、バックエンドでこれを行う例は見つかりませんでした。
私はすでにレスポンスを通常のコールバック、約束、およびオブジェクトリスナーとして処理しようとしましたが、それらのどれも動作していないようで、常に{"message": "Internal server error"}メッセージ私のRESTサービスからの応答として。
ノードと非同期のプログラミングについてはかなり新しいと思いますが、このコードを見直して正しい方法を教えてください。このSDKが呼び出されるように設計されている場合はフロントエンドの代わりにバックエンド?
マイApp.js
var ApiBuilder = require('claudia-api-builder');
var api = new ApiBuilder();
//Routes
var usuario = require('./routes/usuario');
var auth = require('./routes/auth');
//Caminho default da API
var API_ROOT = "simc/api";
//User Routes
api.get(API_ROOT + "/f1", usuario.f1);
api.get(API_ROOT + "/f2", usuario.f2);
//Auth Routes
api.get(API_ROOT + "/login", auth.login);
module.exports = api;
マイ認証ルート
"use strict"
var AWS = require('aws-sdk');
var AWSCognito = require('amazon-cognito-identity-js');
var authAPI = {};
authAPI.login = function() {
var authenticationData = {
Username: 'xxxxxx',
Password: 'xxxxxx',
};
var authenticationDetails = new AWSCognito.AuthenticationDetails(authenticationData);
var poolData = {
UserPoolId: 'us-east-1_xxxxxx',
ClientId: 'xxxxxx'
};
var userPool = new AWSCognito.CognitoUserPool(poolData);
var userData = {
Username: 'xxxxxx',
Pool: userPool
};
//Trying to use Promises
var cognitoUser = new AWSCognito.CognitoUser(userData);
return cognitoUser.authenticateUser(authenticationDetails)
.then(function(result) {
console.log('access token + ' + result.getAccessToken().getJwtToken());
//Use the idToken for Logins Map when Federating User Pools with Cognito Identity or when passing through an Authorization Header to an API Gateway Authorizer
console.log('idToken + ' + result.idToken.jwtToken);
return result;
})
.catch(function(err) {
console.log(err);
return err;
});
//Trying to use Object Listeners
var request = cognitoUser.authenticateUser(authenticationDetails).promise();
return request.on('success', function(response) {
console.log('access token + ' + response.getAccessToken().getJwtToken());
//Use the idToken for Logins Map when Federating User Pools with Cognito Identity or when passing through an Authorization Header to an API Gateway Authorizer
console.log('idToken + ' + response.idToken.jwtToken);
return response;
}).
on('failure', function(err) {
console.log("Error!");
return err;
}).send();
};
module.exports = authAPI;
それも正常に動作していないようですので、私は元のハンドラを変更しました。
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
console.log('access token + ' + result.getAccessToken().getJwtToken());
/*Use the idToken for Logins Map when Federating User Pools with Cognito Identity or when passing through an Authorization Header to an API Gateway Authorizer*/
console.log('idToken + ' + result.idToken.jwtToken);
return 'idToken + ' + result.idToken.jwtToken;
},
onFailure: function(err) {
return err;//alert(err);
},
});
私が間違っていることを知っている人はいますか?事前に
おかげで、 エンリコ・ベルガモ