Экспресс-проверка маркеров API серверной части Js с помощью ответа Azure AD MSAL React

#reactjs #express #azure-active-directory #passport.js #access-token

Вопрос:

у меня есть интерфейс приложения, разработанный с использованием React Js, и серверная часть, созданная с использованием Express Js. Вызовы Api выполняются с помощью Axios.

Требование состоит в том, чтобы аутентифицировать и авторизовать определенного пользователя с системными привилегиями (на основе ролей).

Простые этапы разработки

  1. Войдите в систему с помощью AZURE AD (завершено) с помощью MSAL
  2. Проанализируйте ответ на серверную часть для проверки токенов (требуется помощь в том, как это сделать), и если токен действителен, можно получить доступ к маршрутам api, если не вернуть ответ как неудачную аутентификацию

Я хочу знать, что передавать из внешнего интерфейса MSAL-ответа в серверный экспресс-api и как проверять токены ответа и работать с токенами обновления с помощью passport js.

Вот как я получаю ответ от MSAL с помощью AZURE AD (ВХОД в систему O365), я хочу знать, что я должен передать из ответа в серверный экспресс-api js?

 import { useMsal } from '@azure/msal-react';
import { loginRequest } from '../../common/authConfig';
import { useIsAuthenticated } from '@azure/msal-react';

useEffect(() => {
        const token = window.sessionStorage.getItem('token');
        if (token == null amp;amp; !isAuthenticated) {
            handleLogin();
        }
        handAuth(isAuthenticated);
    }, [isAuthenticated]);

    const handAuth = (authenticated) => {
        console.log(authenticated);
        if (authenticated) {
            instance
                .acquireTokenSilent({
                    ...loginRequest,
                    account: accounts[0],
                })
                .then((response) => {
                    console.log(response);
                    window.sessionStorage.setItem('token', response.idToken);
                    window.sessionStorage.setItem('email', response.account.username);
                })
                .then(() => {
                    const token = window.sessionStorage.getItem('token');
                    const email = window.sessionStorage.getItem('email');
                    console.log('new'   token);
                    console.log('email'   email);
                });
        }
    };

    const handleLogin = () => {
        const accounts = instance.getAllAccounts();
        if (accounts.length > 0) {
            instance.setActiveAccount(accounts[0]);
        }
        instance
            .handleRedirectPromise()
            .then((authResult) => {
                if (!authResult) {
                    instance.loginRedirect();
                }
            })
            .catch((err) => {
                console.log(err);
            });

        // instance.loginRedirect(loginRequest).catch((e) => {
        //  console.log(e);
        // });
    };
 

мой код класса сервера, в котором я хочу знать, как проверить токен и проверить, действителен ли токен, а затем предоставить доступ к маршруту api/пользователей

 const http = require('http');
const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');
const HttpError = require('./models/http-error');
require('dotenv').config();

const server = express();
const uri = process.env.ATLAS_URI;
const port = process.env.PORT || 5000;

server.use(cors());
server.use(express.json());

const userRoutes = require('./routes/user-routes');
server.use('/api/users', userRoutes);

//#region Error Handing
server.use((req, res, next) => {
    const error = new HttpError('Could not find this route.', 404);
    throw error;
});
 

введите описание изображения здесь