0

我找到了有关如何使用 passport-azure-ad 来保护 NodeJS 中的 WebAPI 的示例(例如,使用 BearerStrategy),但我还没有找到任何专门在 NodeJS 中实现 OBO 流程的示例。

在我的情况下,我有一个客户端应用程序,它在 Authorization 标头中向我的 NodeJS 服务发送不记名身份验证令牌。如果我的理解是正确的,如果我想让我的 NodeJS 服务以用户身份调用 MS Graph API,我必须将令牌交换为不同的令牌作为 OBO 流程的一部分。

在我为使用 .NET 的服务找到的示例中,有一个用于此目的的库(并且您调用诸如 AcquireTokenAsync 之类的东西,并将 Bearer 令牌作为断言)。如果服务是 NodeJS 而不是 .NET,是否应该使用类似的库?

我知道这可以通过直接发出 HTTP 请求来完成,我只是不知道这是否是在 NodeJS 中执行此操作的首选/唯一方法。

谢谢!

4

1 回答 1

1

实际上,adal-node 包不支持代流。为了实现这一点,我们必须进行新的 HTTP 调用并在请求中传递断言。我建议您阅读服务中的传入令牌并对(https://login.microsoftonline.com/b2bc09c8-9386-47b1-8aexxxxxxxxxx/oauth2/token)端点进行新的 http 调用,并带有断言以获取令牌MS 图形 API。

下面是使用邮递员代表流程获取令牌的屏幕截图。

在此处输入图像描述

下面是使用 node.js 中的代表流获取访问令牌的代码

var qs = 要求(“查询字符串”);

var http = 要求(“https”);

var options = {“方法”:“POST”、“主机名”:[“登录”、“microsoftonline”、“com”]、“路径”:[“b2bc09c8-9386-47xxxxxxxx”、“oauth2”、“令牌” ], "headers": { "Content-Type": "application/x-www-form-urlencoded", "cache-control": "no-cache", "Postman-Token": "739540c9-1e3d-4d74- bxxxxxx" } };

var req = http.request(options, function (res) { var chunks = [];

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

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

});

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',断言:'来自本机应用程序的传入访问令牌',request_token_use:'on_behalf_of',未定义:未定义}));req.end();

您可以提取访问令牌并将其用于承载请求中的资源。我希望这能解决你的问题。

于 2019-04-01T11:31:21.057 回答