Я новичок в Azure функциях. Я пытаюсь использовать API-интерфейсы Graph внутри функции Azure, запускаемой HTTP, в javascript. Я нашел несколько документов, связанных с этим аргументом. Также пара вопросов о переполнении стека, но весь материал довольно старый, и с тех пор улучшились как Graph, так и Azure Functions. Когда я просто создаю функцию, она отлично работает. Если я просто добавлю привязку к Auth Token (https://graph.microsoft.com), даже не касаясь индекса. js, функция перестанет работать и вернет ошибку 404 (файл не найден). Попытка подключения даже не регистрируется в мониторе или в Applications Insights. Я создаю функцию прямо с портала Azure (без локального развертывания). Я уже создал приложение в AAD и изменил аутентификацию в моем приложении-функции для подключения к этому приложению. Также авторизовал пользователя Azure в Microsoft Graph (через Graph Explorer), но по-прежнему получаю эту ошибку 404. Что мне следует проверить?
Изменить на основе ответа Тони Джу:
Я отключил аутентификацию службы приложений и выполнил шаги здесь , как было предложено . Я просто изменил несколько вещей, чтобы он работал в функции Azure (сообщение было для чистого Node.js). на самом деле, это мой индекс. js:
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 каталога (клиента).
Моя функция. 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. Кажется, что-то не связано с кодом, а связано с привязками функций.
Редактировать после нового комментария Тони Джу и дальнейших экспериментов:
Спасибо Тони: auth привязка не требуется.
Также необходимо go в службу приложений-функций, затем в консоль (в инструментах разработки) и выполнить
npm install axios
npm install qs
Кроме того, в моем предыдущем листинге для index. js, функция должна быть асинхронной c:
module.exports = async function (context, req) {
Таким образом, это работает. Спасибо, Тони.