使用JavaScript验证Azure函数中的图形API

使用JavaScript验证Azure函数中的图形API,azure,azure-functions,microsoft-graph-api,msal.js,Azure,Azure Functions,Microsoft Graph Api,Msal.js,我想使用NodeJS创建一个azure函数,并对图形API进行身份验证。通过阅读,我知道我必须使用客户端凭据流。我使用的代码如下所示: const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> const APP_ID = [appId]'; const APP_SECERET = '[secret]'; cons

我想使用NodeJS创建一个azure函数,并对图形API进行身份验证。通过阅读,我知道我必须使用客户端凭据流。我使用的代码如下所示:

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);
      });

};
const-httpTrigger:AzureFunction=async函数(context:context,req:HttpRequest):承诺
常量APP_ID=[appId]';
const APP_SECERET='[secret]';
常量标记https://login.microsoftonline.com/[tenantid]/oauth2/v2.0/token';
常数MS\u图\u范围=https://graph.microsoft.com/.default';
const axios=require('axios');
常数qs=要求('qs');
常量postData={
客户端id:应用程序id,
范围:MS_图形_范围,
客户机密:APP\u SECERET,
授予类型:“客户端凭据”
};
axios.defaults.headers.post['Content-Type']=
‘application/x-www-form-urlencoded’;
axios
.post(令牌_端点,qs.stringify(postData))
。然后(响应=>{
context.res={
正文:response.data//JSON.stringify(w,null,4)
};
})
.catch(错误=>{
console.log(错误);
});
};
如本文所述:

但是,这不起作用,因为它甚至没有向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;
3。要启动该函数,我运行了以下命令:

npm install axios
npm install qs
npm install
npm start
4.请求函数后,我得到的结果如下:

当我运行npm start时,它会为我的本地函数提供url。我打开一个新的浏览器选项卡并请求它,但它只显示一个空白页。我打开fiddler并检查是否有任何对Azure的请求,但什么都没有,这只是对我的本地函数的一个请求,并且没有返回任何内容。@BR1当我们在VS代码中启动函数时,它只是在本地上宿主。它将为我们提供一个本地函数请求的url。在您的函数代码(或我的函数代码)中,当我们请求本地函数url时,我们请求在函数代码中进行身份验证。请注意我的函数代码(下面是response====和上面是response=====)。我们在那里获得访问令牌,然后我们可以使用访问令牌请求图形api。@BR1如果您想请求azure的函数url,您可以将函数部署到azure,但不能在本地的VS代码中运行它。