Реализация пула пользователей Cognito на сервере Node Lambda - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь использовать пулы пользователей Cognito с моим сайтом проекта, но мне трудно найти примеры, где Cognito используется на стороне сервера.

Существует множество документов по всему миру, которыедействительно отталкивает меня.Я использую пакет amazon-cognito-identity-js, но я также нахожу ресурсы для AWS Amplify, которые выглядят совершенно иначе, чем amazon-cognito-identity-js, хотя этот пакет "является частью ampify" .

В настоящее время у меня есть вход, регистрация и подтверждение работы и подтверждения пользователей.

Вход / Регистрация:

var AmazonCognitoIdentity = require('amazon-cognito-identity-js');

var pool = {
    UserPoolId : 'pool-id',
    ClientId : 'client-id'
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(pool);

var cognitoSignUp = (body, attributeList) => new Promise((acc, rej) => {
    userPool.signUp(body.email, body.password, attributeList, null, function(err, res) {
        if (err) {
            rej(err);
        } else {
            acc(res);
        }
    });
});

var cognitoSignIn = (body) => new Promise((acc, rej) => {
    var authData = {
        Username: body.email,
        Password: body.password
    }
    var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authData);
    var userData = {
        Username: body.email,
        Pool: userPool
    };
    var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
    cognitoUser.authenticateUser(authenticationDetails, {
        onSuccess: function(res) {
            acc(res);
        }, 
        onFailure: function(err) {
            rej(err);
        }
    });
});

Мой следующий шагчтобы убедиться, что я защищаю свои конечные точки лямбда-API.Вот где мне очень тяжело.

Я просматривал эти ресурсы о том, как получить текущего пользователя на сервере и проверить, что пользователь аутентифицирован и защищает apis.

В ходе этого исследования я нашел 2 способа проверки текущего пользователя

  • проверки токенов вручную
  • проверка сеанса (взято из 4-й ссылки выше)

    const AccessToken = new CognitoAccessToken({ AccessToken: tokens.accessToken });
    const IdToken = new CognitoIdToken({ IdToken: tokens.idToken });
    const RefreshToken = new CognitoRefreshToken({ RefreshToken: tokens.refreshToken });
    const sessionData = {
      IdToken: IdToken,
      AccessToken: AccessToken,
      RefreshToken: RefreshToken
    };
    const userSession = new CognitoUserSession(sessionData);
    const userData = {
      Username: email,
      Pool: this.userPool
    };
    const cognitoUser = new CognitoUser(userData);
    cognitoUser.setSignInUserSession(userSession);
    cognitoUser.getSession(function (err, session) { // You must run this to verify that session (internally)
      if (session.isValid()) {
        // Update attributes or whatever else you want to do
      } else {
        // TODO: What to do if session is invalid?
      }
    });
    

И я нашел 2 способа защиты API

  • Lambda Authorizer
  • Пулы пользователей в качестве авторизатора

Теперь я просто застрял, не зная, какой путь выбрать.Моя самая большая проблема с документацией AWS заключается в том, что она говорит вам, что вам нужно сделать, но не дает примеров того, как это сделать.Например, материал Authorizer, на котором я не нашел примеров aws.Кроме того, пакет npm для amazon-cognito-identity-js даже не говорит о возвращении токенов cognito или о том, как их использовать, это просто реализация на стороне клиента.Все примеры, которые я нашел по этому поводу, были в блогах, созданных другими пользователями.

У кого-нибудь есть какие-либо рекомендации или полные полные примеры использования пулов пользователей cognito с лямбдой?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...