#reactjs #express #azure-active-directory #passport.js #access-token
Вопрос:
у меня есть интерфейс приложения, разработанный с использованием React Js, и серверная часть, созданная с использованием Express Js. Вызовы Api выполняются с помощью Axios.
Требование состоит в том, чтобы аутентифицировать и авторизовать определенного пользователя с системными привилегиями (на основе ролей).
Простые этапы разработки
- Войдите в систему с помощью AZURE AD (завершено) с помощью MSAL
- Проанализируйте ответ на серверную часть для проверки токенов (требуется помощь в том, как это сделать), и если токен действителен, можно получить доступ к маршрутам 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;
});