Вызов Graph API внутри функции javascript Azure - PullRequest
3 голосов
/ 29 мая 2020

Я новичок в 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) {

Таким образом, это работает. Спасибо, Тони.

1 Ответ

0 голосов
/ 30 мая 2020

Я уже создал приложение в AAD и изменил аутентификацию в моем функциональном приложении для подключения к этому приложению.

На основании вашего описания вы включили аутентификацию для своей функции. В этом случае вы можете обратиться к ответу здесь .

Если вы не хотите добавлять аутентификацию в свою функцию, и вы просто хотите вызвать Microsoft API в своей функции. Вы можете использовать поток учетных данных клиента . Пожалуйста, обратитесь к моему ответу здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...