Краткое руководство. Вход пользователей и вызов API Microsoft Graph из веб-приложения ASP.NET

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

Иллюстрацию см. в разделе Как работает этот пример.

Необходимые компоненты

Регистрация и скачивание приложения

Совет

Действия, описанные в этой статье, могут немного отличаться на портале, с который вы начинаете работу.

Есть два варианта по созданию приложения: автоматическая или ручная настройка.

Автоматическая настройка

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

  1. Войдите в краткое руководство по центру администрирования Microsoft Entra как минимум облачные приложения Администратор istrator.
  2. Введите имя приложения и нажмите кнопку Зарегистрировать.
  3. Следуйте инструкциям, чтобы скачать и автоматически настроить новое приложение одним щелчком мыши.

Настройка вручную

Если вы хотите вручную настроить приложение и пример кода, воспользуйтесь следующими процедурами.

Шаг 1. Регистрация приложения

  1. Войдите в Центр администрирования Microsoft Entra как минимум облачные приложения Администратор istrator.
  2. Если у вас есть доступ к нескольким клиентам, используйте значок Параметры в верхнем меню, чтобы переключиться на клиент, в котором вы хотите зарегистрировать приложение из меню каталогов и подписок.
  3. Перейдите к приложениям> удостоверений>Регистрация приложений и выберите "Создать регистрацию".
  4. В поле Имя введите имя для своего приложения. Например, введите ASPNET-Quickstart. Это имя будут видеть пользователи приложения. Вы сможете изменить его позже.
  5. В качестве типа URI перенаправления выберите Интернет и задайте значение https://localhost:44368/.
  6. Выберите Зарегистрировать.
  7. В разделе Управление выберите Проверка подлинности.
  8. В разделе Неявное предоставление разрешения и гибридные потоки выберите Токены идентификатора.
  9. Выберите Сохранить.

Шаг 2. Скачивание проекта

Скачать пример кода ASP.NET

Совет

Чтобы избежать ошибок, вызванных ограничениями длины пути в Windows, рекомендуется извлечь архив или клонировать репозиторий в каталог рядом с корневой папкой диска.

Шаг 3. Запуск проекта

  1. Извлеките ZIP-файл в локальный каталог рядом с корневым. Например, извлеките в C:\Azure-Samples.

    Рекомендуется извлечь архив в каталог рядом с корнем диска, чтобы избежать ошибок, вызванных ограничениями длины пути в Windows.

  2. Откройте решение в Visual Studio (AppModelv2-WebApp-OpenIDConnect-DotNet.sln).

  3. В зависимости от версии Visual Studio может потребоваться щелкнуть правой кнопкой мыши проект AppModelv2-WebApp-OpenIDConnect-DotNet и выбрать Восстановить пакеты NuGet.

  4. Откройте консоль диспетчера пакетов, выбрав пункт Просмотр>Другие окна>Консоль диспетчера пакетов. Затем выполните Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r.

  5. Измените appsettings.json и замените параметры ClientIdи TenantredirectUri следующим образом:

    "ClientId" :"Enter_the_Application_Id_here" />
    "TenantId": "Enter_the_Tenant_Info_Here" />
    "RedirectUri" :"https://localhost:44368/" />
    

    В этом коде:

    • Enter_the_Application_Id_here — это идентификатор приложения (клиента) для регистрации ранее созданного приложения. Найдите идентификатор приложения (клиента) на странице обзора приложения в Регистрация приложений в Центре администрирования Microsoft Entra.
    • Enter_the_Tenant_Info_Here является одним из следующих параметров:
      • Если ваше приложение поддерживает вариант Только моя организация, замените это значение на идентификатор каталога (клиента) или имя клиента (например, contoso.onmicrosoft.com). Найдите идентификатор каталога (клиента) на странице обзора приложения в Регистрация приложений в Центре администрирования Microsoft Entra.
      • Если приложение поддерживает вариант Учетные записи в любом каталоге организации, замените это значение на organizations.
      • Если приложение поддерживает вариант Все пользователи с учетными записями Майкрософт, замените это значение на common.
    • redirectUri— это URI перенаправления, введенный ранее в Регистрация приложений в Центре администрирования Microsoft Entra.

Дополнительные сведения

В этом разделе представлен код, используемый для выполнения входа пользователей. Это может быть полезно для рассмотрения принципов работы кода и основных аргументов. Также вы поймете, нужно ли добавлять функцию входа в существующее приложение ASP.NET.

Как работает этот пример

Схема взаимодействия между веб-браузером, веб-приложением и платформой удостоверений Майкрософт в примере приложения.

Пакеты NuGet для ПО промежуточного слоя OWIN

Вы можете настроить конвейер проверки подлинности, используя проверку подлинности на основе файлов cookie, с помощью OpenID Connect в ASP.NET и пакетов ПО промежуточного слоя OWIN. Эти пакеты можно установить, выполнив в консоли диспетчера пакетов Visual Studio следующие команды:

Install-Package Microsoft.Identity.Web.Owin
Install-Package Microsoft.Identity.Web.GraphServiceClient
Install-Package Microsoft.Owin.Security.Cookies

Класс Startup OWIN

ПО промежуточного слоя OWIN использует класс startup, выполняемый при запуске процесса размещения. В этом кратком руководстве используется файл startup.cs, расположенный в корневом каталоге. В следующем коде показан параметр, используемый в этом кратком руководстве:

    public void Configuration(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions());
        OwinTokenAcquirerFactory factory = TokenAcquirerFactory.GetDefaultInstance<OwinTokenAcquirerFactory>();

        app.AddMicrosoftIdentityWebApp(factory);
        factory.Services
            .Configure<ConfidentialClientApplicationOptions>(options => { options.RedirectUri = "https://localhost:44368/"; })
            .AddMicrosoftGraph()
            .AddInMemoryTokenCaches();
        factory.Build();
    }
Где Description
ClientId Идентификатор приложения, зарегистрированного на портале Azure.
Authority Конечная точка службы токенов безопасности для проверки подлинности пользователей. Для общедоступного облака это обычно https://login.microsoftonline.com/{tenant}/v2.0. В этом URL-адресе {tenant} — это имя вашего клиента, идентификатор вашего клиента или значение common для ссылки на общую конечную точку. (Общая конечная точка используется для мультитенантных приложений.)
RedirectUri URL-адрес, по которому пользователи переходят после проверки подлинности на платформе удостоверений Майкрософт.
PostLogoutRedirectUri URL-адрес, куда пользователи переходят после выхода.
Scope Список запрашиваемых областей, разделенных пробелами.
ResponseType Запрос на то, чтобы ответ от проверки подлинности содержал код авторизации и маркер идентификации.
TokenValidationParameters Список параметров для проверки маркеров. В этом случае для ValidateIssuer задано значение false, чтобы указать, что приложение может принимать операции входа под любыми типами личных, рабочих или учебных учетных записей.
Notifications Список делегатов, которые можно запускать для сообщений OpenIdConnect.

Запрос проверки подлинности

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

public void SignIn()
{
    if (!Request.IsAuthenticated)
    {
        HttpContext.GetOwinContext().Authentication.Challenge(
            new AuthenticationProperties{ RedirectUri = "/" },
            OpenIdConnectAuthenticationDefaults.AuthenticationType);
    }
}

Совет

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

Атрибут защиты контроллера или его действий

Контроллер или его действия можно защитить с помощью атрибута [Authorize]. Этот атрибут ограничивает доступ к контроллеру или действиям, разрешая доступ к действиям контроллера только пользователям, прошедшим проверку подлинности. После этого запрос на проверку подлинности будет выполняться автоматически, когда не прошедший проверку подлинности пользователь попытается получить доступ к одному из действий или контроллеров, обозначенных атрибутом [Authorize].

Вызов Microsoft Graph из контроллера

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

    try
    { 
        var me = await this.GetGraphServiceClient().Me.GetAsync();
        ViewBag.Username = me.DisplayName;
    }
    catch (ServiceException graphEx) when (graphEx.InnerException is MicrosoftIdentityWebChallengeUserException)
    {
        HttpContext.GetOwinContext().Authentication.Challenge(OpenIdConnectAuthenticationDefaults.AuthenticationType);
        return View();
    }

Справка и поддержка

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

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

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