Есть ли способ реализовать поток Azure AD от имени (OBO) в NodeJS, используя такую ​​библиотеку, как Passport? - PullRequest
0 голосов
/ 05 марта 2019

Я нашел примеры того, как использовать passport-azure-ad для защиты WebAPI в NodeJS (например, используя BearerStrategy), но я не нашел никаких примеров реализации потока OBO в NodeJS.

В моей ситуации у меня есть клиентское приложение, которое отправляет токен на предъявителя моей службе NodeJS в заголовке авторизации. Если мое понимание верно, если я затем хочу, чтобы моя служба NodeJS вызывала API-интерфейс MS Graph как пользователь, я должен обменять токен на другой, как часть потока OBO.

В примерах, которые я нашел для службы, использующей .NET, для этой цели есть библиотека (и вы называете что-то вроде AcquireTokenAsync с токеном Bearer в качестве подтверждения). Есть ли подобная библиотека, которую следует использовать, если сервисом является NodeJS вместо .NET?

Я знаю, что это можно сделать, отправляя HTTP-запросы напрямую , я просто не знал, было ли это предпочтительным / единственным способом сделать это в NodeJS.

Спасибо!

1 Ответ

1 голос
/ 01 апреля 2019

На самом деле пакет adal-node не поддерживает поток от имени. Чтобы реализовать это, мы должны сделать новый HTTP-вызов и передать утверждение в запросе. Я бы посоветовал вам прочитать входящий токен в вашем сервисе и сделать новый вызов http для конечной точки (https://login.microsoftonline.com/b2bc09c8-9386-47b1-8aexxxxxxxxxx/oauth2/token)) с утверждением, чтобы получить токен для MS Graph API.

Ниже приведен скриншот для получения токена от имени пользователя в потоке.

enter image description here

Ниже приведен код для получения токена доступа с использованием потока от имени в файле node.js

var qs = require ("querystring");

var http = require ("https");

var options = {"method": "POST", "hostname": ["login", "microsoftonline", "com"], "path": ["b2bc09c8-9386-47xxxxxxxx", "oauth2", "token"], "headers": {"Content-Type": "application / x-www-form-urlencoded", "cache-control": "no-cache", "Postman-Token": "739540c9-1e3d -4d74-bxxxxxxx "}};

var req = http.request (параметры, функция (res) { var chunks = [];

res.on("data", function (chunk) {
    chunks.push(chunk);
});

res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
});
* * 1 022});

req.write (qs.stringify ({ grant_type: 'urn: ietf: params: oauth: grant-type: jwt-bearer', client_id: 'd1538209-a56f-4301-863dxxxxxxxxxxxxx', ресурс: 'https://graph.microsoft.com/', client_secret: 'NITLQThsHDlPb0FR + 8oXxxxxxxxxxxxxxxxxxxx', область действия: 'openid', утверждение: «токен входящего доступа из нативного приложения», required_token_use: 'on_behalf_of', не определено: не определено })); req.end (); * +1027 *

Вы можете извлечь токен доступа и использовать его против ресурса в запросе на предъявителя. Я надеюсь, что это решит вашу проблему.

...