В этой статье мы узнаем, как создать Rest API для аутентификации с помощью Node.js, Express.js и AWS Cognito.

· Предварительные требования
· Обзор
Что такое AWS CloudFormation?
Что такое Amazon Cognito?
· Настройка Amazon Cognito
· Настройка проекта NodeJs
Установка Express и других зависимостей
Определение конечных точек
· Протестирование API
· Заключение
· Ссылки

Предпосылки

Это список всех предварительных условий:

Обзор

В этой статье мы будем использовать два сервиса AWS: AWS CloudFormation и Amazon Cognito.

Что такое AWS CloudFormation?

AWS CloudFormation — это сервис «инфраструктура как код» (IaC), который помогает моделировать и настраивать ресурсы AWS, чтобы вы могли тратить меньше времени на управление этими ресурсами и уделять больше внимания своим приложениям, работающим в AWS.

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html

Что такое Amazon Cognito?

Amazon Cognito обеспечивает аутентификацию, авторизацию и управление пользователями для ваших веб-приложений и мобильных приложений. Ваши пользователи могут входить в систему напрямую, используя имя пользователя и пароль, или через третью сторону, например Facebook, Amazon, Google или Apple.

Двумя основными компонентами Amazon Cognito являются пулы пользователей и пулы удостоверений. Пулы пользователей — это пользовательские каталоги, предоставляющие варианты регистрации и входа для пользователей вашего приложения. Пулы удостоверений позволяют предоставлять пользователям доступ к другим сервисам AWS. Вы можете использовать пулы удостоверений и пулы пользователей по отдельности или вместе.

https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html

Настройка Amazon Cognito

Мы собираемся использовать шаблон AWS CloudFormation для создания нашего стека AWS Cognito. Существует три способа создания шаблона CloudFormation, который содержит информацию о конфигурации ресурсов AWS для включения в стек.

  • Загрузите свой собственный шаблон
  • Использование образца шаблона, предоставленного AWS
  • Создать храм в Конструкторе

Мы решили создать модель с нуля для корпуса. Ниже приведен полный шаблон.

  1. Войдите в Консоль управления AWS и откройте сервис CloudFormation.
  2. Затем вы нажимаете кнопку «создать стек» и указываете шаблон

Укажите имя стека и доменное имя cognito.

Следующие шаги мастера — «Настройка параметров стека» и «Просмотр».

Шаблон CloudFormation развернут, как вы можете видеть на вкладке событий стека, наш стек успешно создан.

Пул пользователей Amazon Cognito готов.

Мы закончили настройку пула пользователей AWS Cognito 👨🏼‍💻

Настройка проекта NodeJs

Чтобы настроить приложение Node.js с сервером Express.js, мы сначала создадим каталог для нашего проекта, в котором он будет находиться:

mkdir node-cognito-auth-api && cd node-cognito-auth-api

Затем давайте создадим json-файл пакета с помощью команды npm initcommand.

Установите Express и другие зависимости

Теперь нам нужно установить все зависимости, необходимые для запуска нашего API.

npm install --save express
npm install @aws-sdk/client-cognito-identity-provider
npm install dotenv
npm install dotenv
npm install body-parser
npm install swagger-ui-express swagger-jsdoc

package.json

{
  "name": "cognito-auth-api",
  "version": "1.0.0",
  "description": "AWS cognito auth server with AWS SDK for JavaScript (v3)",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "dev": "nodemon server.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/anicetkeric/node-cognito-auth-api.git"
  },
  "keywords": [
    "jwt",
    "nodejs",
    "authentication",
    "auth-server",
    "aws-sdk",
    "aws",
    "amazon-cognito",
    "expressjs"
  ],
  "author": "aek",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/anicetkeric/node-cognito-auth-api/issues"
  },
  "homepage": "https://github.com/anicetkeric/node-cognito-auth-api#readme",
  "dependencies": {
    "@aws-sdk/client-cognito-identity-provider": "^3.370.0",
    "body-parser": "^1.20.2",
    "cors": "^2.8.5",
    "dotenv": "^16.3.1",
    "express": "^4.18.2",
    "express-validator": "^7.0.1",
    "jwt-decode": "^3.1.2",
    "swagger-jsdoc": "^6.2.8",
    "swagger-ui-express": "^5.0.0"
  },
  "devDependencies": {
    "nodemon": "^3.0.1"
  }
}

Определить конечные точки

Мы будем использовать Node.JS AWS SDK для SignUp, confirmSignUp и Вход конечные точки.

AWS SDK состоит из клиентов и команд. CognitoIdentityProviderClient используется для отправки запроса с помощью команды с входными параметрами.

Во-первых, нам нужно инициировать клиент с конфигурацией (учетные данные, регион). Мы будем использовать переменную среды из файла .env в Node.JS.

sign-up.js: содержит методы signUp и confirmSignup.

initiate-auth.js: содержит методы signIn и refreshToken.

Протестируйте API

Теперь мы можем запустить наш API и протестировать его.

npm run start

http://localhost:3080/api-docs/

Регистрация учетной записи

Amazon Cognito отправляет электронное письмо или SMS с подтверждением учетной записи пользователя для подтверждения регистрации пользователя. В нашем случае пользователь получил проверочный код по электронной почте.

Затем вам нужно подтвердить адрес электронной почты, используя конечную точку /confirm-sign-up.

Учетная запись пользователя проверена, как показано ниже на скриншоте 👏

Теперь, когда учетная запись пользователя создана и проверена, давайте попробуем пройти аутентификацию с помощью конечной точки /login. Он возвращает токен доступа jwt, токен обновления и токен идентификации.

Заключение

Отличная работа !!. В этой статье мы увидели, как создать API Rest для аутентификации с использованием Node.js, Express.js и AWS Cognito.

Полный исходный код доступен на GitHub.

Если вам понравилась статья, не забудьте похлопать 👏. Вы можете связаться со мной и подписаться на Medium, Twitter, GitHub

Рекомендации