簡體   English   中英

如何使用AWS Cognito SDK使用NodeJS從REST服務驗證用戶?

[英]How to use AWS Cognito SDK to authenticate user from REST Service using NodeJS?

所有!

我目前面臨一個問題,即使用ClaudiaJS + Claudia-API-Builder構建的lambda函數通過“/ api / auth”在我的Cognito UserPool上驗證用戶身份。 我似乎找不到成功調用cognitoUser.authenticateUser

到目前為止我找到的所有資源都是通過瀏覽器調用這個API,但我在后端找不到任何這樣做的例子。

我已經嘗試將響應處理為常規回調,promises和對象偵聽器,但它們似乎都沒有工作,我總是得到一條{“message”:“Internal server error”}消息作為我的回復REST服務。

同樣重要的是,我對Node和Async編程相當新,但是你能不能回顧一下這段代碼並告訴我正確的方法,如果這個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);
        },

    });

有沒有人知道我做錯了什么?

在此先感謝,Enrico Bergamo

var authenticationDetails = new AWS.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);

使用此功能包含該功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM