Как получить токен с авторизованным пользователем в Azure Active Directory в Node.js - PullRequest
0 голосов
/ 20 февраля 2019

У меня запущено веб-приложение в Node.js.Это аутентификация интегрирована с Azure Active Directory.В настоящее время мы используем субъект-службу для вызова API, зарегистрированного в каталоге.Как я могу изменить запрос токена, чтобы он выполнялся аутентифицированным пользователем, а не субъектом службы?Это происходит главным образом потому, что все действия после вызовов регистрируются как Принципал службы, а не зарегистрированным пользователем.

Это фактический код, который я использую для запроса токена и доступа к API:

var qs = require('qs');
const axios = require('axios');
const Swagger = require("swagger-client");
const request = require("request");
const http = require("https");


const AUTHORITY = 'https://login.microsoftonline.com/<tenant_name>';
const WORKBENCH_API_URL = '<api_url>';
const RESOURCE = '<resource_id>';
const CLIENT_APP_Id = '<service_principal_id>';
const CLIENT_SECRET = '<serivce_principal_secret>';


// Getting token from AAD
const acquireTokenWithClientCredentials = async(resource, clientId, clientSecret, authority) => {
  const requestBody = {
    resource: resource,
    client_id: clientId,
    client_secret: clientSecret,
    grant_type: 'client_credentials'
  };
  console.log(acquireTokenWithClientCredentials);

  const response = await axios({
    method: 'POST',
    url: `${authority}/oauth2/token`,
    data: qs.stringify(requestBody),
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
  });

  return response.data;
}

Я использую стратегию passport-azure-ad с перенаправлениями.

Заранее благодарен за любую помощь.

1 Ответ

0 голосов
/ 20 февраля 2019

В настоящее время в вашем коде используется поток разрешений для учетных данных клиента , где токен приобретается с использованием идентификатора участника приложения / службы.

Вы можете изменить использование потока разрешения кода авторизации вчтобы использовать личность пользователя для получения токена и вызова соответствующего API.

Концептуальная документация : Код авторизации Azure AD Предоставление потока

Конкретный образец Node.js : Код авторизацииОбразец

В этом образце используется ADAL для Node.js .

Я только выделяю здесь важную часть, но ссылка выше дает полный код веб-сайта на GitHub, а также некоторые ссылки на библиотеку, которую он использует.

authenticationContext.acquireTokenWithAuthorizationCode(
    req.query.code,
    redirectUri,
    resource,
    clientId, 
    clientSecret,
    function(err, response) {
      var errorMessage = '';
      if (err) {
        errorMessage = 'error: ' + err.message + '\n';
      }
      errorMessage += 'response: ' + JSON.stringify(response);
      res.send(errorMessage);
    }
  );
...