Я пытаюсь использовать пулы пользователей 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 с лямбдой?
Спасибо