使用计时器触发的Azure javascript函数检索承载访问令牌时出现问题

时间:2019-05-23 09:49:17

标签: javascript oauth-2.0 azure-active-directory azure-functions azure-function-async

我有一个Azure计时器触发函数,该函数需要对Graph API进行各种调用,这意味着我需要由租户的AAD发出的OAuth2 Bearer令牌。

因此,我已经在下面编写了该函数,该函数基于我先前编写的用于进行Ajax调用的代码,该代码对AAD进行了调用以获得我所需的Bearer令牌。

我已经使用邮递员测试了URL,客户端ID,客户端机密和授权类型设置,并且它们返回了有效的承载令牌供我使用。 但是,代码进行了调用,但未返回任何内容,似乎只是挂起了。 在Azure门户中进行测试运行时,我得到一个

  

状态503服务不可用。

async function getToken() {
  return new Promise((resolve, reject) => {
    try {
      let https = require("https");

      let url =
        "https://login.microsoftonline.com/<azure_tenancy>.onmicrosoft.com/oauth2/token";

      let options = {
        method: "POST",
        headers: {
          "Content-Type": "application/json; charset=utf-8",
          "Cache-Control": "no-cache"
        }
      };

      let body = {
        grant_type: "client_credentials",
        client_id: "<client_id>",
        client_secret: "client_secret>",
        resource: "https://graph.microsoft.com"
      };

      var req = https
        .request(url, options, res => {
          let data = "";
          res.on("data", chunk => {
            data += chunk;
          });

          res.on("end", () => {
            resolve(JSON.parse(data));
          });
        })
        .on("error", err => {
          throw new Exception(e.message);
        });

      req.write(JSON.stringify(body));
      req.end();
    } catch (e) {
      context.log("error caught");
      reject(e);
    }
  });
}

邮递员返回:

{
    "token_type": "Bearer",
    "expires_in": "3600",
    "ext_expires_in": "3600",
    "expires_on": "1558542984",
    "not_before": "1558539084",
    "resource": "https://graph.microsoft.com",
    "access_token": "eyJ...e8mw"
}

所以我知道我传递的URL,ID和Secret是正确的。它一定是代码中的其他内容,但是我对这些内容感到困惑。有任何线索吗?

0 个答案:

没有答案