0

我正在尝试使用前端(http://localhost:8080)和 API 后端(http://localhost:5000)做一个 node.js 应用程序。在这两种情况下,我都希望通过 Azure AD 进行身份验证。

这是我的第一个这样的应用程序,所以我不知道如何处理它。

我想做的是:

  1. 在前端使用微软账号登录;
  2. 当用户登录,获取路由时(即http://localhost:8080/list),调用后端API(http://localhost:5000/api/list)获取信息'list'并渲染(取决于用户访问权限)。

我正在考虑使用“passport-azure-ad”,但我不知道该采取什么策略?OIDCStrategy 还是 BearerStrategy ?

我可以使用 OIDCStrategy 轻松进行前端登录,但我没有“承载”,所以我不明白如何使用相同的“登录”来调用后端 API?使用 BearerStrategy,我试图通过获取 'https://login.microsoftonline.com/'+MyTenantId+'/oauth2/v2.0/authorize?response_type=code&client_id='+MyClientId+'&redirect_uri=http%3A 来获得 Bearer %2F%2Flocalhost%3A3000%2Fcallback&scope=openid' 但每次我在 jwt.io 上对其进行测试时,它都会作为无效的承载('无效签名')返回,并且我无法在后端服务器中使用该承载。

我有点迷茫怎么办?我需要帮助。

谢谢

4

1 回答 1

0

如本文档所示,您可以进行 HTTP 调用以获取访问令牌。你可以用 Postman 试试。

在 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(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: '<your-application-id>', resource: 'https://graph.microsoft.com/', client_secret: '<your-client-secret>', scope: 'openid', assertion: 'xxxxx', requested_token_use: 'on_behalf_of', undefined: undefined })); 
req.end();

您可以提取访问令牌并将其用于承载请求中的资源。

于 2020-10-08T01:01:33.157 回答