Руководство. Доступ к Microsoft Graph из защищенного приложения JavaScript в качестве пользователя

Узнайте, как получить доступ к Microsoft Graph из веб-приложения, работающего на Azure App Service.

Диаграмма, демонстрирующая доступ к Microsoft Graph.

Вы хотите добавить доступ к Microsoft Graph из веб-приложения и выполнить некоторые действия в качестве пользователя, выполнившего вход. В этом разделе описывается предоставление делегированных разрешений веб-приложению и получение сведений о профиле пользователя, выполнившего вход, из Microsoft Entra ID.

В этом руководстве описано следующее:

  • предоставить веб-приложению делегированные разрешения;
  • Вызов Microsoft Graph из веб-приложения для вошедшего пользователя.

Если у вас нет учетной записи Azure, создайте учетную запись free перед началом работы.

Предварительные требования

  • Веб-приложение, работающее на платформе Azure App Service с включенным модулем аутентификации/авторизации App Service.

Предоставление интерфейсного доступа к вызову Microsoft Graph

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

Note

Технически вы предоставляете веб-приложению Microsoft Entra разрешения на доступ к приложению Microsoft Graph от Microsoft Entra для пользователя.

  1. В Microsoft Entra admin center выберите Entra ID.

  2. Выберите регистрация приложений>принадлежащие приложения>Просмотреть все приложения в этом каталоге. Выберите имя веб-приложения, а затем выберите Разрешения API.

  3. Выберите "Добавить разрешение", а затем выберите API Майкрософт, а затем Microsoft Graph.

  4. Щелкните Делегированные разрешения, а затем выберите из списка User.Read. Выберите Добавить разрешения.

Настройка службы приложений для возврата используемых токенов доступа

Теперь веб-приложение имеет необходимые разрешения для доступа к Microsoft Graph в качестве пользователя, вошедшего в систему. В этом разделе вы настраиваете проверку подлинности и авторизацию в службе приложений, чтобы получить пригодный для использования маркер доступа для взаимодействия с Microsoft Graph. Для этого шага необходимо добавить User.Read область для нижестоящей службы (Microsoft Graph): https://graph.microsoft.com/User.Read

Внимание

Если служба App Service не настроена для возврата пригодного маркера доступа, вы получите ошибку CompactToken parsing failed with error code: 80049217 при вызове API Microsoft Graph в вашем коде.

Перейдите к Azure Обозреватель ресурсов и используя дерево ресурсов, найдите веб-приложение. URL-адрес ресурса должен быть похож на https://management.azure.com/subscriptions/subscriptionId/resourceGroups/SecureWebApp/providers/Microsoft.Web/sites/SecureWebApp20200915115914.

Теперь обозреватель ресурсов Azure открыт с веб-приложением, выбранным в дереве ресурсов.

  1. В верхней части страницы выберите Edit, чтобы включить редактирование Azure ресурсов.

  2. В браузере слева перейдите к разделу config>authsettingsV2.

  3. В представлении authsettingsV2 выберите Изменить.

  4. Найдите раздел входа identityProviders> и добавьте следующие параметры loginParameters: "loginParameters":[ "response_type=code id_token","scope=openid offline_access profile https://graph.microsoft.com/User.Read" ]

    "identityProviders": {
        "azureActiveDirectory": {
          "enabled": true,
          "login": {
            "loginParameters":[
              "response_type=code id_token",
              "scope=openid offline_access profile https://graph.microsoft.com/User.Read"
            ]
          }
        }
      }
    },
    
  5. Сохраните настройки, выбрав PUT.

Эти настройки могут вступить в силу через несколько минут. Теперь веб-приложение настроено для доступа к Microsoft Graph с соответствующим токеном доступа. Если это не так, Microsoft Graph возвращает ошибку, указывающую, что формат компактного токена неверный.

Вызов Microsoft Graph из Node.js

Теперь веб-приложение имеет необходимые разрешения. Он также добавляет идентификатор клиента Microsoft Graph в параметры входа.

Установка пакетов клиентских библиотек

Установите пакеты @azure/identity и пакеты @microsoft/microsoft-graph-client в проекте с npm.

npm install @microsoft/microsoft-graph-client

Настройка информации для аутентификации

Создайте объект для хранения параметров проверки подлинности:

// partial code in app.js
const appSettings = {
    appCredentials: {
        clientId: process.env.WEBSITE_AUTH_CLIENT_ID, // Enter the client Id here,
        tenantId: "common", // Enter the tenant info here,
        clientSecret: process.env.MICROSOFT_PROVIDER_AUTHENTICATION_SECRET // Enter the client secret here,
    },
    authRoutes: {
        redirect: "/.auth/login/aad/callback", // Enter the redirect URI here
        error: "/error", // enter the relative path to error handling route
        unauthorized: "/unauthorized" // enter the relative path to unauthorized route
    },
    protectedResources: {
        graphAPI: {
            endpoint: "https://graph.microsoft.com/v1.0/me", // resource endpoint
            scopes: ["User.Read"] // resource scopes
        },
    },
}

Вызов Microsoft Graph от имени пользователя

В следующем коде показано, как вызвать контроллер Microsoft Graph в качестве приложения и получить некоторые сведения о пользователе.

// controllers/graphController.js

// get the name of the app service instance from environment variables
const appServiceName = process.env.WEBSITE_SITE_NAME;

const graphHelper = require('../utils/graphHelper');

exports.getProfilePage = async(req, res, next) => {

    try {
        // get user's access token scoped to Microsoft Graph from session
        // use token to create Graph client
        const graphClient = graphHelper.getAuthenticatedClient(req.session.protectedResources["graphAPI"].accessToken);

        // return user's profile
        const profile = await graphClient
            .api('/me')
            .get();

        res.render('profile', { isAuthenticated: req.session.isAuthenticated, profile: profile, appServiceName: appServiceName });   
    } catch (error) {
        next(error);
    }
}

Предыдущий код использует следующую функцию getAuthenticatedClient для возврата Microsoft Graph клиента.

// utils/graphHelper.js

const graph = require('@microsoft/microsoft-graph-client');

getAuthenticatedClient = (accessToken) => {
    // Initialize Graph client
    const client = graph.Client.init({
        // Use the provided access token to authenticate requests
        authProvider: (done) => {
            done(null, accessToken);
        }
    });

    return client;
}

Очистка ресурсов

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

В этом руководстве описано следующее:

  • Удалите ресурсы Azure, созданные при выполнении руководства.

Удаление группы ресурсов

  1. На портале Azure в меню портала Azure выберите группы ресурсов.

  2. Выберите группу ресурсов, содержащую вашу службу приложений и план службы приложений.

  3. Щелкните Удалить группу ресурсов. Одновременно с группой ресурсов удаляются все содержащиеся в ней ресурсы.

    Снимок экрана: удаление группы ресурсов.

Это действие может занять несколько минут.

Удаление регистрации приложения

  1. В Microsoft Entra admin center выберите App registrations. Затем выберите созданное вами приложение.

    Снимок экрана: выбор регистрации приложения.

  2. В разделе общих сведений регистрации приложения выберите Удалить.

    Снимок экрана: удаление регистрации приложения.

Удалите внешнего арендатора

Если вы создали новый внешний клиент, его можно удалить.

  1. В Центре администрирования Microsoft Entra перейдите к Entra ID>Обзор>Управление арендаторами.

  2. Выберите клиент, который нужно удалить, и нажмите кнопку "Удалить".

    Перед удалением клиента может потребоваться выполнить необходимые действия. Например, может потребоваться удалить все потоки пользователей и регистрации приложений в арендуемой организации.

  3. Если вы готовы удалить арендатора, выберите Удалить.

Следующие шаги

Из этого руководства вы узнали, как:

  • предоставить веб-приложению делегированные разрешения;
  • Вызов Microsoft Graph из веб-приложения для вошедшего пользователя.