如何从Node Script获取Microsoft Graph API访问令牌?

问题描述 投票:2回答:2

我想使用这个库与我的AD - https://github.com/microsoftgraph/microsoft-graph-docs/blob/master/concepts/nodejs.md的图形API进行交互

但是,我发现返回访问令牌的所有现有javascript库都希望传入返回URL,以及其他一些特定于Web的东西,这让我相信这是微软的一些要求。

有没有什么好方法可以在运行后端节点脚本时验证/接收访问令牌(没有任何与Web相关的内容),以便我可以开始对Microsoft Graph API进行调用?提前感谢您的建议。

node.js azure-active-directory azure-ad-graph-api
2个回答
4
投票

要运行连接到Graph API的后端非用户身份验证守护程序,您需要使用仅限应用程序的身份验证流程。以下是the official steps的快速摘要:

  1. 创建Azure AD租户。请注意yourtenant.onmicrosoft.com名称,并将此值复制下来。
  2. 通过全球Azure Active Directory刀片的App Registrations部分注册应用程序,而不是直接在租户属性中注册。复制Application ID;我们以后会需要的。
  3. 创建一个与注册绑定的密钥,并记住将其复制下来。单击后,您无法获取键值,因此请务必复制它。
  4. 同时更新注册的权限,单击Save,然后点击Grant Permissions按钮。
  5. login.microsoftonline.com域发出HTTP请求以获取访问令牌。
  6. 使用访问令牌发出图谱API请求。

Here's a link to Microsofts Node.js example,这里是HTTP调用中direct documentation的链接,用于检索访问令牌。这是一个超级精简的示例,它将输出检索到的访问令牌。替换[Tenant][ApplicationID][Key]值:

const request = require("request");

const endpoint = "https://login.microsoftonline.com/[Tenant].onmicrosoft.com/oauth2/token";
const requestParams = {
    grant_type: "client_credentials",
    client_id: "[ApplicationID]",
    client_secret: "[Key]",
    resource: "https://graph.windows.net"
};

request.post({ url:endpoint, form: requestParams }, function (err, response, body) {
    if (err) {
        console.log("error");
    }
    else {
        console.log("Body=" + body);
        let parsedBody = JSON.parse(body);         
        if (parsedBody.error_description) {
            console.log("Error=" + parsedBody.error_description);
        }
        else {
            console.log("Access Token=" + parsedBody.access_token);
        }
    }
});

一旦我们有了access_token,我们就可以调用Graph API。假设应用程序权限已正确配置并从步骤#4应用,我们可以开始制作图谱API请求:

function testGraphAPI(accessToken) {
    request.get({
        url:"https://graph.windows.net/[Tenant]/users?api-version=1.6",
        headers: {
          "Authorization": accessToken
        }
    }, function(err, response, body) {
        console.log(body);
    });
}

1
投票

BU0的答案对我来说无法正常工作,因为微软改变了他们使用图形API的方式,因此我无法获得所需的所有数据。这是我如何使用BU0答案和这个tutorial做到的:

const request = require("request");

const endpoint = "https://login.microsoftonline.com/[Tenant]/oauth2/v2.0/token";
const requestParams = {
    grant_type: "client_credentials",
    client_id: "[ApplicationID]",
    client_secret: "[Key]",
    scope: "https://graph.microsoft.com/.default"
};

request.post({ url:endpoint, form: requestParams }, function (err, response, body) {
    if (err) {
        console.log("error");
    }
    else {
        console.log("Body=" + body);
        let parsedBody = JSON.parse(body);         
        if (parsedBody.error_description) {
            console.log("Error=" + parsedBody.error_description);
        }
        else {
            console.log("Access Token=" + parsedBody.access_token);
        }
    }
});

function testGraphAPI(accessToken) {
    request.get({
        url:"https://graph.microsoft.com/v1.0/users",
        headers: {
          "Authorization": "Bearer " + accessToken
        }
    }, function(err, response, body) {
        console.log(body);
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.