使用 JavaScript 从 Azure Functions 对 Graph API 进行身份验证

Authenticate to Graph API from Azure Functions with JavaScript

我想使用 NodeJS 创建一个 azure 函数并向 Graph API 进行身份验证。通过阅读,我知道我必须使用客户端凭证流。我正在使用此代码作为 posted by:

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> 
    const APP_ID = [appId]';
    const APP_SECERET = '[secret]';
    const TOKEN_ENDPOINT ='https://login.microsoftonline.com/[tenantid]/oauth2/v2.0/token';
    const MS_GRAPH_SCOPE = 'https://graph.microsoft.com/.default';
    
    const axios = require('axios');
    const qs = require('qs');

    const postData = {
        client_id: APP_ID,
        scope: MS_GRAPH_SCOPE,
        client_secret: APP_SECERET,
        grant_type: 'client_credentials'
      };
      
      axios.defaults.headers.post['Content-Type'] =
      'application/x-www-form-urlencoded';

    axios
      .post(TOKEN_ENDPOINT, qs.stringify(postData))
      .then(response => {
        context.res = {
           
            body: response.data //JSON.stringify(w, null, 4)
        };
      })
      .catch(error => {
        console.log(error);
      });

};

如本文所述post:

但是这不起作用,因为它甚至没有向 Azure 发出请求。有什么东西不见了吗?我不能在使用 Node 时使用 MSAL.JS 进行服务器到服务器调用,还是它仅适用于基于 Web 的应用程序,不能与 azure 函数一起使用?

我看到的大多数示例都与 .Net 相关,它们使用了一堆 nuget 包等。JavaScript azure 函数不支持我需要的东西吗?

谢谢。

我不知道你为什么说它甚至没有向 azure 发出请求,我用与你几乎相同的代码测试它并且它工作正常。我提供以下详细步骤供您参考。

1. 我在 VS 代码中创建了一个类型脚本函数(不要忘记在代码的第二行声明 require),我的函数代码显示为:

import { AzureFunction, Context, HttpRequest } from "@azure/functions"
declare var require: any

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {

    const APP_ID = 'xxxxxx';
    const APP_SECERET = 'xxxxxx';
    const TOKEN_ENDPOINT ='https://login.microsoftonline.com/xxxxxx/oauth2/v2.0/token';
    const MS_GRAPH_SCOPE = 'https://graph.microsoft.com/.default';

    const axios = require('axios');
    const qs = require('qs');

    const postData = {
        client_id: APP_ID,
        scope: MS_GRAPH_SCOPE,
        client_secret: APP_SECERET,
        grant_type: 'client_credentials'
    };

    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

    axios
      .post(TOKEN_ENDPOINT, qs.stringify(postData))
      .then(response => {
        console.log('=====below is response====');
        console.log(response.data);
        console.log('=====above is response====');
        context.res = {
           
            body: response.data
        };
      })
      .catch(error => {
        console.log(error);
      });

};

export default httpTrigger;

2. 我通过命令安装 axiosqs 模块:

npm install axios
npm install qs

3. 要启动该功能,我 运行 命令:

npm install
npm start

4.请求函数后,我得到的结果是: