如何从节点脚本获取Microsoft Graph API访问令牌?

Aba*_*ett 4 node.js azure-active-directory azure-ad-graph-api

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

但是,我发现所有用于返回访问令牌的现有javascript库都希望传递一个返回URL,以及一些其他特定于Web的东西,这使我相信这是Microsoft的某种要求。

在运行后端节点脚本(与网络无关)时,是否有任何好的方法来认证/接收访问令牌,以便可以开始针对Microsoft Graph API进行调用?在此先感谢您的建议。

Vin*_*our 11

BU0的答案对我来说不正确,因为微软改变了他们使用图形 API 的方式,所以我无法获得我需要的所有数据。这是我使用 BU0 答案和本教程的方法

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);
    });
}
Run Code Online (Sandbox Code Playgroud)


BU0*_*BU0 5

要运行连接到Graph API的未经用户身份验证的后端守护程序,您需要使用仅应用程序身份验证流程。以下是官方步骤的快速摘要:

  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. 使用访问令牌发出Graph API请求。

这是指向Microsofts Node.js示例的链接,这是指向HTTP调用中用于检索访问令牌的直接文档的链接。这是一个超级精简的示例,将输出检索到的访问令牌。更换[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);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

获得access_token后,我们可以调出Graph API。假设正确配置了应用程序权限并从第4步开始应用,我们可以开始发出Graph 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);
    });
}
Run Code Online (Sandbox Code Playgroud)