在javascript Azure函数内调用图形API
我对Azure功能非常陌生。我试图在javascript中使用HTTP触发的Azure函数中的图形API。 我发现很少有文件与这个论点相关。这里还有几个关于堆栈溢出的问题,但是所有的材料都非常陈旧,从那时起Graph和Azure函数都有所改进。 当我刚刚创建函数时,它工作得非常好。如果我简单地将一个绑定添加到Auth Token(),而不涉及index.js,那么函数将停止工作并返回404错误(找不到文件)。连接尝试甚至未登录到monitor或Applications Insights。我直接从Azure门户构建该功能(无本地部署)。我已经在AAD上创建了一个应用程序,并将我的功能应用程序上的身份验证更改为连接到此应用程序。还授权Microsoft Graph上的Azure用户(通过Graph Explorer),但仍会收到此404错误。我应该检查什么 根据Tony Ju的答案进行编辑: 我关闭了应用程序服务身份验证,并按照建议的步骤操作。我只是做了一些改动,让它在Azure函数中工作(这篇文章是针对纯Node.js的)。实际上,这是我的index.js:在javascript Azure函数内调用图形API,javascript,azure-functions,microsoft-graph-api,Javascript,Azure Functions,Microsoft Graph Api,我对Azure功能非常陌生。我试图在javascript中使用HTTP触发的Azure函数中的图形API。 我发现很少有文件与这个论点相关。这里还有几个关于堆栈溢出的问题,但是所有的材料都非常陈旧,从那时起Graph和Azure函数都有所改进。 当我刚刚创建函数时,它工作得非常好。如果我简单地将一个绑定添加到Auth Token(),而不涉及index.js,那么函数将停止工作并返回404错误(找不到文件)。连接尝试甚至未登录到monitor或Applications Insights。我直接从
const APP_ID = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';
const APP_SECERET = 'XXXX~-XXX~XXXXXXXXXXXXX~XXXXXXXXX~';
const TOKEN_ENDPOINT ='https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/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'
};
module.exports = function (context, req) {
axios.defaults.headers.post['Content-Type'] =
'application/x-www-form-urlencoded';
let token = '';
axios
.post(TOKEN_ENDPOINT, qs.stringify(postData))
.then(response => {
context.log(response.data);
})
.catch(error => {
context.log(error);
});
};
XXXX分别取自AAD应用程序:应用程序(客户端)ID、应用程序客户端机密和目录(租户)ID
My function.json如下所示:
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"name": "graphToken",
"direction": "in",
"type": "token",
"resource": "https://graph.microsoft.com",
"identity": "userFromRequest"
}
]
}
仍然得到404错误。似乎与代码无关,但与函数绑定有关
在Tony Ju的新评论和进一步实验后编辑:
感谢Tony:授权绑定是不必要的
还需要转到功能应用程序服务,然后转到控制台(在开发工具下)并发布
npm install axios
npm install qs
另外,在我前面的index.js清单中,函数需要是异步的:
module.exports = async function (context, req) {
这样,它就工作了。谢谢你,托尼
我已经在AAD上创建了一个应用程序,并更改了我的应用程序的身份验证
功能应用程序以连接到此应用程序
根据您的描述,您已启用对功能的身份验证。在这种情况下,您可以参考答案
如果不想向函数添加身份验证,而只想在函数中调用Microsoft API。你可以用。请参考我的答案。谢谢托尼。我已经试过你的第一个解决方案了,但是我错过了第二个。我现在试着跟着第二个,但没有运气。请参阅问题中的我的编辑。@Massimo
{“名称”:“graphToken”,“方向”:“in”,“键入”:“令牌”,“资源”:https://graph.microsoft.com“,”标识“:”userFromRequest“}
不需要。你需要删除它,你是对的。删除它,并通过控制台(npm安装)安装axios和qs模块。现在这个函数几乎可以工作了。它将令牌输出到控制台,但在5分钟后超时(Azure函数限制)。还添加了context.res={body:“OK”};以满足输出绑定,但结果仍然相同。我想我在函数设置中缺少了一些内容。我发现了问题:函数需要异步。