Как проверить accessToken в узле / express, используя aws -amplify? - PullRequest
4 голосов
/ 31 марта 2020

Я использую AWS усиление для аутентификации пользователя в моем внешнем приложении React. Мое приложение React напрямую связывается с ampify без какого-либо взаимодействия с бэкендом (сервер узла).

У меня есть REST API, написанный в узле / express. Я хочу защитить этот API с помощью ampify.

В настоящее время я планирую передать токен доступа из приложения реагирования на сервер узлов. Но я не могу найти способ, с помощью которого я могу проверить этот токен на серверной стороне с помощью ampify.

Предоставляет ли пакет aws -amplify какую-либо функцию, с помощью которой я могу передать токен доступа для его проверки?

Что-то вроде Auth.verifyToken(<access_token>)

1 Ответ

1 голос
/ 05 апреля 2020

К сожалению, в официальном SDK для aws такой метод недоступен. После долгих исследований мне пришлось написать собственное промежуточное программное обеспечение для этого. Это не так сложно, как может показаться, но единственная сложная часть - собрать правильную информацию из огромной AWS документации.

Я написал это промежуточное ПО для достижения того же, надеюсь, это поможет

import axios from 'axios'
import awsconfig from '../../aws-exports';

const COGNITO_URL = `https://cognito-idp.${awsconfig.aws_project_region}.amazonaws.com/`;

const authentication = async (req, res, next) => {
    try {
        const accessToken = req.headers.authorization.split(" ")[1];

        const { data } = await axios.post(
            COGNITO_URL,
            {
                AccessToken: accessToken
            },
            {
                headers: {
                    "Content-Type": "application/x-amz-json-1.1",
                    "X-Amz-Target": "AWSCognitoIdentityProviderService.GetUser"
                }
            }
        )

        req.user = data;
        next();
    } catch (error) {
        return res.status(401).json({
            message: 'Auth failed'
        });
    }
};

export default authentication;

Это промежуточное ПО берет заголовок авторизации и проверяет входящий accessToken, используя AWS Cognito REST API.

Чтобы получить accessToken на своем внешнем интерфейсе, вы можете сделать что-то вроде этого:

const { accessToken: { jwtToken } } = await Auth.currentSession();

Этот jwtToken является вашим accessToken, вы можете отправить его в заголовок Authorization и затем проверить это в бэкэнде, используя написанное мной промежуточное ПО.

...