【问题标题】:Is there a way to implement the Azure AD on-behalf-of (OBO) flow in NodeJS using a library like Passport?有没有办法使用像 Passport 这样的库在 NodeJS 中实现 Azure AD 代表 (OBO) 流?
【发布时间】:2019-04-01 19:31:21
【问题描述】:

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

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

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

我知道可以通过发出 HTTP requests directly 来完成,我只是不知道这是否是在 NodeJS 中首选/唯一的方式。

谢谢!

【问题讨论】:

  • 下面的答案是正确的,应该这样标记。 :)

标签: azure-active-directory passport-azure-ad


【解决方案1】:

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

以下是使用邮递员代流获取令牌的截图。

以下是在 node.js 中使用代理流获取访问令牌的代码

var qs = require("querystring");

var http = require("https");

var options = { "method": "POST", "hostname": [ "login", "microsoftonline", "com" ], "path": [ "b2bc09c8-9386-47xxxxxxxx", "oauth2", “令牌”],“标题”:{“内容类型”:“应用程序/x-www-form-urlencoded”,“缓存控制”:“无缓存”,“邮递员令牌”:“739540c9-1e3d -4d74-bxxxxxxx" } };

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

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+8oXxxxxxxxxxxxxxxxxxxxxx', 范围:'openid', 断言:'来自本机应用程序的传入访问令牌', 请求令牌使用:'on_behalf_of', 未定义:未定义 })); req.end();

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

【讨论】:

  • 感谢您提供详细信息。我知道它可以使用这样的 http 请求来完成,但似乎不寻常的是没有一个库来解决这个问题,只是因为它似乎有其他平台的库。
猜你喜欢
  • 1970-01-01
  • 2013-11-09
  • 2017-11-19
  • 2020-01-08
  • 2021-06-13
  • 2020-03-19
  • 2021-12-06
  • 2019-07-04
相关资源
最近更新 更多