используйте MSAL.js для NodeJs - PullRequest
       133

используйте MSAL.js для NodeJs

0 голосов
/ 23 декабря 2019

Я хотел бы пройти аутентификацию в Azure, чтобы запросить токен доступа и использовать его для Graph API. Итак, я сделал свою домашнюю работу и начал с этого руководства

https://docs.microsoft.com/en-us/graph/auth-v2-service

Я смог успешно пройти аутентификацию. Но количество кода было огромным. Это мой собственный код, который я написал для аутентификации:

https://pastebin.com/7sYWyhZJ

Если скрипту требуется доступ к токену текущего сеанса, ему просто нужно вызвать функцию getAuthenticationInfo. Из-за огромного количества кода мне было интересно, является ли мой код избыточным или, возможно, неправильным.

Небольшое исследование привело меня к MSAL.js , который (я думаю) обрабатываетаутентификация для меня. MSAL использует другой подход, чем руководство из ссылки, которую я разместил выше. Я начал с этого простого демонстрационного кода JS (у меня есть только демо-счет, поэтому учетные данные не должны иметь значения)

const msal = require('msal');

async function start() {
    const clientId = 'bec52b71-dc94-4577-9f8d-b8536ed0e73d';
    const clientSecret = 'OV/NkBIWH7d3G/BGyJQN3vxQA]fT6qK@';
    const tenant = '2c1714e1-1030-4da9-af5e-59630d7fe05f';
    const scope = 'https://graph.microsoft.com/.default';
    const grantType = 'client_credentials';

    const msalConfig = {
        auth: {
            clientId
        }
    };

    const msalInstance = new msal.UserAgentApplication(msalConfig);

    const tokenRequest = {
        scope,
    };

    try {
        const tokenResponse = await msalInstance.acquireTokenSilent(tokenRequest);
        const { accessToken } = tokenResponse;

        console.log(accessToken);
    } catch (error) {
        throw error;
    }
}
start();

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

ReferenceError: окно не определено

Кажется, что код пытается получить доступ к хранилищу браузера. Но мой код работает в среде Node. Так что, может быть, кто-то так мило скажет мне, как я могу передать свой код из фрагмента, основанного на первой ссылке на подход MSAL?

Насколько я понял, MSAL должен помочь мне, ямне не нужно самому писать код аутентификации, и я могу сократить свой собственный код.

Заранее спасибо!


Обновление

На основена ответ Аллена Вуса Я попробовал ADAL.js, и этот код, кажется, работает нормально

const { AuthenticationContext } = require('adal-node');

const clientId = 'bec52b71-dc94-4577-9f8d-b8536ed0e73d';
const clientSecret = 'OV/NkBIWH7d3G/BGyJQN3vxQA]fT6qK@';
const tenant = '2c1714e1-1030-4da9-af5e-59630d7fe05f';
const authorityHostUrl = 'https://login.windows.net';
const authorityUrl = `${authorityHostUrl}/${tenant}`;
const resource = 'https://graph.microsoft.com';
const context = new AuthenticationContext(authorityUrl);

context.acquireTokenWithClientCredentials(resource, clientId, clientSecret, (error, tokenResponse) => {
    if (error) {
        throw error;
    }

    console.log(tokenResponse);
});

Единственное, что я не получил, это то, что resource. Не стесняйтесь добавлять комментарии, объясняющие это:)

1 Ответ

2 голосов
/ 23 декабря 2019

Вы получаете эту ошибку «ReferenceError: окно не определено», потому что браузер не существует на узле.

MSAL.js предназначен для использования в клиентском JavaScript, работающем в веб-браузере, таком какв случае одностраничных приложений. Другими словами, в настоящее время он не поддерживает nodejs.

Для вашего консольного приложения вам может понадобиться взглянуть на MSAL .Net .

. интересоваться ADAL для nodejs .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...