Краткое руководство. Добавление возможности входа в веб-приложение с помощью учетной записи Майкрософт

Из этого краткого руководства вы узнаете, как скачать и выполнить пример кода, где показано веб-приложение ASP.NET, способное выполнить вход в систему для пользователей с учетными записями Azure Active Directory (Azure AD).

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

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

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

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

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

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

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

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

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

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

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

Шаг 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, Tenantи redirectUri на :

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

    В этом коде:

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

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

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

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

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

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

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

Install-Package Microsoft.Identity.Web.Owin
Install-Package Microsoft.Identity.Web.MicrosoftGraph
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();
    }
Where Описание
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.Request().GetAsync();
        ViewBag.Username = me.DisplayName;
    }
    catch (ServiceException graphEx) when (graphEx.InnerException is MicrosoftIdentityWebChallengeUserException)
    {
        HttpContext.GetOwinContext().Authentication.Challenge(OpenIdConnectAuthenticationDefaults.AuthenticationType);
        return View();
    }

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

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

Дальнейшие действия

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

В следующем кратком руководстве используется пример кода веб-приложения ASP.NET Core, чтобы продемонстрировать, как выполнять вход пользователей из любой организации Azure Active Directory (Azure AD).

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

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

Регистрация и скачивание приложения, используемого в этом кратком руководстве

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

  1. Войдите на портал Azure.
  2. Если доступ к нескольким клиентам доступен, используйте фильтр Каталоги и подписки в верхнем меню, чтобы переключиться на клиент, в котором нужно зарегистрировать приложение.
  3. Найдите и выберите Azure Active Directory.
  4. В разделе Управление выберите Регистрация приложений>Создать регистрацию.
  5. Введите имя приложения Например, введите AspNetCore-Quickstart. Пользователи приложения увидят это имя и могут быть изменены позже.
  6. В качестве типа URI перенаправления выберите Интернет и задайте значение https://localhost:44321/signin-oidc.
  7. Выберите Зарегистрировать.
  8. В разделе Управление выберите Проверка подлинности.
  9. Для параметра Front-channel logout URL (URL-адрес выхода Front-channel) введите значение https://localhost:44321/signout-oidc.
  10. В разделе Неявное предоставление разрешения и гибридные потоки выберите Маркеры идентификации.
  11. Щелкните Сохранить.
  12. В разделе Управление выберите Сертификаты & секреты>Секреты клиента>Создать секрет клиента.
  13. Введите описание, например clientsecret1.
  14. Для истечения срока действия секрета выберите значение Через один год.
  15. Выберите Добавить и сразу же запишите значение секрета для использования на следующем этапе. Значение секрета больше не будет отображаться. Его невозможно восстановить никаким другим способом. Запишите его в надежном месте как обычный пароль.

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

Скачивание решения ASP.NET Core

Шаг 3. Настройка проекта ASP.NET Core

  1. Извлеките файл .zip в локальную папку, близкую к корню диска, чтобы избежать ошибок, вызванных ограничениями длины пути в Windows. Например, извлеките в C:\Azure-Samples.

  2. Откройте решение в выбранном редакторе кода.

  3. В файле appsettings.json замените значения ClientId, и TenantId. Значение идентификатора приложения (клиента) и каталога (клиента) можно найти на странице обзор приложения в портал Azure.

    "Domain": "[Enter the domain of your tenant, e.g. contoso.onmicrosoft.com]",
    "ClientId": "Enter_the_Application_Id_here",
    "TenantId": "common",
    
    • Enter_the_Application_Id_Here — это идентификатор приложения (клиента) для зарегистрированного приложения.
    • Замените Enter_the_Tenant_Info_Here одним из следующих элементов:
      • Если приложение поддерживает учетные записи только в этом каталоге организации, замените это значение идентификатором каталога (клиента) (GUID) или именем клиента (например, contoso.onmicrosoft.com). Идентификатор каталога (клиента) можно найти на странице обзора приложения.
      • Если приложение поддерживает учетные записи в любом каталоге организации, замените это значение на organizations.
      • Если приложение поддерживает всех пользователей учетных записей Майкрософт, оставьте это значение commonкак .
    • Замените Enter_the_Client_Secret_Hereсекретом клиента , который был создан и записан на предыдущем шаге.

Для целей этого руководства изменение других значений в файле appsettings.json не требуется.

Шаг 4. Сборка и запуск приложения

Выполните сборку и запустите приложение в Visual Studio, выбрав пункт меню Отладка >Начать отладку или нажав клавишу F5.

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

Экран

После получения согласия на запрошенные разрешения приложение отображает, что вход выполнен успешно, используя правильные учетные данные Azure Active Directory. Адрес электронной почты учетной записи пользователя будет отображаться в разделе результатов API на странице. Он был извлечен с помощью API Graph Майкрософт.

Веб-браузер, отображающий работающее веб-приложение и вошедшего в него пользователя

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

В этом разделе приведен обзор кода, необходимого для выполнения входа пользователей в систему и вызова API Microsoft Graph от их имени. В этом обзоре содержатся сведения о работе кода, основных аргументах, а также о добавлении входа в имеющееся приложение ASP.NET Core и вызове Microsoft Graph. В нем используется библиотека Microsoft.Identity.Web, являющаяся оболочкой для MSAL.NET.

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

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

Класс Startup

ПО промежуточного слоя Microsoft.AspNetCore.Authentication использует класс Startup, который выполняется при запуске ведущего процесса.

  // Get the scopes from the configuration (appsettings.json)
  var initialScopes = Configuration.GetValue<string>("DownstreamApi:Scopes")?.Split(' ');

  public void ConfigureServices(IServiceCollection services)
  {
      // Add sign-in with Microsoft
      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))

            // Add the possibility of acquiring a token to call a protected web API
            .EnableTokenAcquisitionToCallDownstreamApi(initialScopes)

                // Enables controllers and pages to get GraphServiceClient by dependency injection
                // And use an in memory token cache
                .AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
                .AddInMemoryTokenCaches();

      services.AddControllersWithViews(options =>
      {
          var policy = new AuthorizationPolicyBuilder()
              .RequireAuthenticatedUser()
              .Build();
          options.Filters.Add(new AuthorizeFilter(policy));
      });

      // Enables a UI and controller for sign in and sign out.
      services.AddRazorPages()
          .AddMicrosoftIdentityUI();
  }

С помощью метода AddAuthentication() службу можно настроить так, чтобы она добавляла проверку подлинности на основе файлов cookie. Эта проверка подлинности используется в сценариях браузера, а также для установки запроса OpenID Connect.

Строка, содержащая.AddMicrosoftIdentityWebApp, добавляет платформа удостоверений Майкрософт проверки подлинности в приложение. Затем приложение настраивается для входа пользователей на основе следующей информации в разделе AzureAD файла конфигурации appsettings.json:

Ключ appsettings.json Описание
ClientId Идентификатор приложения (клиента) , зарегистрированного на портале Azure.
Instance Конечная точка службы токенов безопасности для проверки подлинности пользователей. Обычно это значение https://login.microsoftonline.com/, указывающее на общедоступное облако Azure.
TenantId Имя клиента, идентификатор клиента (уникальный идентификатор) или common для входа пользователей под рабочими, учебными или личными учетными записями Майкрософт.

Метод EnableTokenAcquisitionToCallDownstreamApi позволяет приложению получить маркер для вызова защищенных веб-API. AddMicrosoftGraph позволяет контроллерам или страницам Razor напрямую GraphServiceClient воспользоваться (путем внедрения зависимостей), а AddInMemoryTokenCaches методы позволяют приложению воспользоваться кэшем маркеров.

Метод Configure() содержит два важных метода: app.UseAuthentication() и app.UseAuthorization(), которые обеспечивают упомянутые функциональные возможности. Кроме того, в методе Configure() необходимо зарегистрировать маршруты Microsoft Identity Web по крайней мере с одним вызовом endpoints.MapControllerRoute() или вызовом endpoints.MapControllers().

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    endpoints.MapRazorPages();
});

Защита контроллера или метода контроллера

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

[AuthorizeForScopes(ScopeKeySection = "DownstreamApi:Scopes")]
public async Task<IActionResult> Index()
{
    var user = await _graphServiceClient.Me.Request().GetAsync();
    ViewData["ApiResult"] = user.DisplayName;

    return View();
}

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

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

Дальнейшие действия

Следующий репозиторий GitHub содержит ASP.NET Core пример кода, указанный в этом кратком руководстве, и другие примеры, в котором показано, как достичь следующего:

  • Добавление проверки подлинности в новое веб-приложение ASP.NET Core.
  • Вызов Microsoft Graph, других API Майкрософт или собственных веб-API.
  • Добавление авторизации.
  • Вход пользователей в национальные облака или вход с помощью удостоверений социальных сетей.

При работе с этим кратким руководством вы скачаете и запустите пример кода. Он демонстрирует, как в веб-приложении Node.js реализовать вход пользователей с помощью потока кода авторизации, а также как получить маркер доступа для вызова API Microsoft Graph.

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

В рамках этого краткого руководства используется библиотека проверки подлинности Майкрософт для Node.js (MSAL Node) с потоком кода авторизации.

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

Регистрация и скачивание приложения, используемого в этом кратком руководстве

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

  1. Войдите на портал Azure.
  2. Если у вас есть доступ к нескольким арендаторам, в верхнем меню используйте фильтр Directories + subscriptions (Каталоги и подписки) , чтобы выбрать арендатор, в котором следует зарегистрировать приложение.
  3. В разделе Управление выберите Регистрация приложений>Создать регистрацию.
  4. Введите значение Name (Имя) для приложения. Пользователи приложения могут видеть это имя. Вы можете изменить его позже.
  5. В разделе Поддерживаемые типы учетных записей выберите Учетные записи только в этом каталоге организации.
  6. В качестве типа URI перенаправления выберите Интернет и задайте значение http://localhost:3000/auth/redirect.
  7. Выберите Зарегистрировать.
  8. На странице приложения Обзор запишите идентификатор приложения (клиента) для использования в будущем.
  9. В разделе Управление выберите Сертификаты и секреты>Секреты клиента>Создать секрет клиента. Оставьте поле для описания пустым, а параметр срока действия — по умолчанию. Затем выберите Добавить.
  10. Запишите значение параметра Секрет клиента для последующего использования.

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

Скачайте основные файлы проекта, чтобы запустить проект с помощью веб-сервера, используя Node.js.

Шаг 3. Настройка приложения Node

Извлеките проект, откройте папку ms-identity-node-main, а затем — файл .env в папке App. Замените значения, как показано ниже:

Переменная Описание Пример(ы)
Enter_the_Cloud_Instance_Id_Here Облачный экземпляр Azure, в котором зарегистрировано приложение https://login.microsoftonline.com/ (включая завершающую косую черту)
Enter_the_Tenant_Info_here Идентификатор арендатора или основной домен contoso.microsoft.com или cbe899ec-5f5c-4efe-b7a0-599505d3d54f
Enter_the_Application_Id_Here Идентификатор клиента зарегистрированного приложения cbe899ec-5f5c-4efe-b7a0-599505d3d54f
Enter_the_Client_Secret_Here Секрет клиента зарегистрированного приложения WxvhStRfDXoEiZQj1qCy
Enter_the_Graph_Endpoint_Here Облачный экземпляр API Microsoft Graph, который будет вызывать ваше приложение https://graph.microsoft.com/ (включая завершающую косую черту)
Enter_the_Express_Session_Secret_Here Случайная строка символов, используемая для подписывания файла cookie сеанса Express WxvhStRfDXoEiZQj1qCy

Файл должен выглядеть примерно так:

CLOUD_INSTANCE=https://login.microsoftonline.com/
TENANT_ID=cbe899ec-5f5c-4efe-b7a0-599505d3d54f
CLIENT_ID=fa29b4c9-7675-4b61-8a0a-bf7b2b4fda91
CLIENT_SECRET=WxvhStRfDXoEiZQj1qCy

REDIRECT_URI=http://localhost:3000/auth/redirect
POST_LOGOUT_REDIRECT_URI=http://localhost:3000

GRAPH_API_ENDPOINT=https://graph.microsoft.com/

EXPRESS_SESSION_SECRET=6DP6v09eLiW7f1E65B8k

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

Запустите проект с помощью Node.js, выполнив приведенные ниже действия.

  1. Чтобы запустить сервер, выполните в каталоге проекта следующую команду.

    cd App
    npm install
    npm start
    
  2. Перейдите к http://localhost:3000/.

  3. Выберите Войти, чтобы начать процесс входа.

    При первом входе вам будет предложено предоставить согласие на то, чтобы приложение могло выполнить вход и получить доступ к вашему профилю. После успешного входа вы будете перенаправлены обратно на домашнюю страницу приложения.

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

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

В этом примере веб-сервер размещается по адресу localhost (порт 3000). Когда веб-браузер получает доступ к этому адресу, приложение отображает домашнюю страницу. Когда пользователь выбирает Войти, приложение перенаправляет браузер на экран входа в Azure AD с помощью URL-адреса, созданного библиотекой узлов MSAL. После согласия пользователя браузер перенаправляет пользователя обратно на домашнюю страницу приложения вместе с идентификатором и маркером доступа.

MSAL Node

Библиотека MSAL Node — это библиотека, используемая для выполнения входа пользователей и запросов маркеров, которые нужны для доступа к API, защищенному платформой удостоверений Майкрософт. Последнюю версию можно скачать с помощью диспетчера пакетов Node.js (NPM):

npm install @azure/msal-node

Дальнейшие действия

Дополнительные сведения о сценарии веб-приложений, поддерживаемом Платформой удостоверений Майкрософт:

Scenario: Web app that signs in users (Сценарий: веб-приложение, которое входит в систему пользователей)

При работе с этим кратким руководством вы скачаете и выполните пример кода. Такой пример кода демонстрирует, как в веб-приложении Java реализовать вход пользователей и вызов Microsoft Graph. Входить в приложение могут пользователи из любой организации Azure Active Directory (Azure AD).

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

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

Для запуска этого примера вам потребуются следующие компоненты:

Регистрация и скачивание приложения, используемого в этом кратком руководстве

Есть два варианта запуска приложения, используемого в этом кратком руководстве: оперативно (вариант 1) и вручную (вариант 2).

Вариант 1. Регистрация и автоматическая настройка вашего приложения, а затем скачивание примера кода

  1. Откройте страницу регистрации приложений на портале Azure и приступите к работе.
  2. Введите имя приложения и нажмите кнопку Зарегистрировать.
  3. Следуйте инструкциям на экране, чтобы скачать автоматически настроенный код приложения.

Вариант 2. Регистрация и настройка приложения и примера кода вручную

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

Чтобы зарегистрировать приложение и добавить в него сведения о регистрации вручную, сделайте следующее:

  1. Войдите на портал Azure.
  2. Если у вас есть доступ к нескольким арендаторам, в верхнем меню используйте фильтр Directories + subscriptions (Каталоги и подписки) , чтобы выбрать арендатор, в котором следует зарегистрировать приложение.
  3. Найдите и выберите Azure Active Directory.
  4. В разделе Управление выберите Регистрация приложений.
  5. Выберите Новая регистрация.
  6. Введите имя приложения, например java-webapp. Это имя отображается для пользователей вашего приложения. Его можно изменить позже.
  7. Выберите Зарегистрировать.
  8. На странице Обзор запишите идентификаторы приложения (клиента) и каталога (арендатора) . Эти значения потребуются позже.
  9. В разделе Управление выберите Проверка подлинности.
  10. Выберите Добавить платформу>Веб.
  11. В разделе URI перенаправления введите https://localhost:8443/msal4jsample/secure/aad.
  12. Нажмите кнопку Настроить.
  13. В разделе Веб в поле URI-коды перенаправления введите https://localhost:8443/msal4jsample/graph/me в качестве второго URI перенаправления.
  14. В разделе Управление выберите Сертификаты и секреты. В разделе Секреты клиента выберите Новый секрет клиента.
  15. Введите описание ключа (например, Секрет приложения), оставьте срок действия по умолчанию и выберите элемент Добавить.
  16. Запишите значение секрета клиента. Он понадобится вам позднее.

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

Скачивание примера кода

Шаг 3. Настройка примера кода

  1. Извлеките ZIP-файл в локальную папку.

  2. Необязательный элемент. Если вы используете интегрированную среду разработки, откройте пример в этой среде.

  3. Откройте файл application.properties. Его можно найти в папке src/main/resources/ . Замените значения в полях aad.clientId, aad.authority и aad.secretKey значениями идентификатора приложения, идентификатора арендатора и секрета клиента соответственно. Это будет выглядеть примерно так:

     aad.clientId=Enter_the_Application_Id_here
     aad.authority=https://login.microsoftonline.com/Enter_the_Tenant_Info_Here/
     aad.secretKey=Enter_the_Client_Secret_Here
     aad.redirectUriSignin=https://localhost:8443/msal4jsample/secure/aad
     aad.redirectUriGraph=https://localhost:8443/msal4jsample/graph/me
     aad.msGraphEndpointHost="https://graph.microsoft.com/"
    

В предыдущем коде:

  • Enter_the_Application_Id_here — идентификатор регистрируемого приложения.
  • Enter_the_Client_Secret_Here — это секрет клиента, созданный вами в разделе Сертификаты и секреты для зарегистрированного приложения.
  • Enter_the_Tenant_Info_Here — это значение идентификатора каталога (арендатора) приложения, которое вы зарегистрировали.
  1. Чтобы использовать протокол HTTPS с localhost, укажите свойства server.ssl.key. Чтобы создать самозаверяющий сертификат, используйте служебную программу keytool (входит в JRE).

Ниже приведен пример:

keytool -genkeypair -alias testCert -keyalg RSA -storetype PKCS12 -keystore keystore.p12 -storepass password

server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=password
server.ssl.key-alias=testCert
  1. Поместите созданный файл хранилища ключей в папку resources.

Шаг 4. Запуск примера кода

Чтобы запустить проект, выполните одно из следующих действий:

  • Запустите его непосредственно из IDE, используя встроенный сервер Spring Boot.
  • Упакуйте проект в WAR-файл с помощью Maven, а затем разверните в решении J2EE для контейнеров, например в Apache Tomcat.
Запуск проекта из IDE

Чтобы запустить веб-приложение из IDE, щелкните элемент "Запустить", а затем перейдите на домашнюю страницу проекта. В этом примере стандартная домашняя страница имеет следующий URL-адрес: https://localhost:8443..

  1. На основной странице нажмите кнопку Вход для перенаправления пользователей в Azure Active Directory и запрашивания у них учетных данных.

  2. После проверки подлинности пользователи перенаправляются по адресу https://localhost:8443/msal4jsample/secure/aad. После входа на странице появятся сведения об учетной записи пользователя. В примере пользовательского интерфейса есть следующие кнопки:

    • Выход: пользователь выходит из приложения и перенаправляется на домашнюю страницу.
    • Показать сведения о пользователе: получение маркера Microsoft Graph и вызов Microsoft Graph с помощью запроса, который содержит этот маркер. Этот запрос возвращает сведения о пользователе, выполнившем вход в систему.
Запуск проекта из Tomcat

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

  1. Откройте файл ms-identity-java-webapp/src/main/java/com.microsoft.azure.msalwebsample/MsalWebSampleApplication.

    • Удалите весь исходный код, заменив его следующим кодом:

       package com.microsoft.azure.msalwebsample;
      
       import org.springframework.boot.SpringApplication;
       import org.springframework.boot.autoconfigure.SpringBootApplication;
       import org.springframework.boot.builder.SpringApplicationBuilder;
       import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
      
       @SpringBootApplication
       public class MsalWebSampleApplication extends SpringBootServletInitializer {
      
        public static void main(String[] args) {
         SpringApplication.run(MsalWebSampleApplication.class, args);
        }
      
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
         return builder.sources(MsalWebSampleApplication.class);
        }
       }
      
  2. HTTP-порт Tomcat по умолчанию — 8080, но вам требуется HTTPS-подключение через порт 8443. Чтобы настроить этот параметр:

    • Перейдите к файлу tomcat/conf/server.xml.

    • Найдите тег <connector> и замените существующий соединитель следующим соединителем:

      <Connector
               protocol="org.apache.coyote.http11.Http11NioProtocol"
               port="8443" maxThreads="200"
               scheme="https" secure="true" SSLEnabled="true"
               keystoreFile="C:/Path/To/Keystore/File/keystore.p12" keystorePass="KeystorePassword"
               clientAuth="false" sslProtocol="TLS"/>
      
  3. Откройте окно командной строки и Перейдите к корневой папке этого примера (где находится файл pom.xml) и запустите mvn package для сборки проекта.

    • С помощью этой команды в каталоге /targets будет создан файл msal-web-sample-0.1.0.war.
    • Переименуйте этот файл в msal4jsample.war.
    • Разверните этот WAR-файл с помощью Tomcat или любого другого решения J2EE для контейнеров.
      • Чтобы развернуть файл msal4jsample.war, скопируйте его в каталог /webapps/ в своей установке Tomcat, а затем запустите сервер Tomcat.
  4. После развертывания файла перейдите по адресу https://localhost:8443/msal4jsample в браузере.

Важно!

В рамках этого краткого руководства приложение использует секрет клиента для собственной идентификации в качестве конфиденциального клиента. Так как секрет клиента добавляется в качестве обычного текста в файлы проекта, из соображений безопасности рекомендуем применять сертификат вместо секрета клиента, прежде чем использовать приложение в рабочей среде. Дополнительные сведения о том, как использовать сертификат, см. в статье Учетные данные сертификата для аутентификации приложения.

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

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

Схема: работа примера приложения, созданного при работе с этим кратким руководством.

Получение MSAL

MSAL для Java (MSAL4J) — это библиотека Java, используемая для выполнения входа пользователей и запрашивания маркеров, которые нужны для доступа к API, защищенному платформой удостоверений Майкрософт.

Добавьте библиотеку MSAL4J в приложение с помощью Maven или Gradle для управления зависимостями, внеся следующие изменения в файл pom.xml (Maven) или build.gradle (Gradle) приложения.

В файле pom.xml:

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>msal4j</artifactId>
    <version>1.0.0</version>
</dependency>

В файле build.gradle:

compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.0.0'

Инициализация MSAL

Добавьте ссылку на MSAL для Java, добавив следующий код в начало файла, в котором будет использоваться MSAL4J:

import com.microsoft.aad.msal4j.*;

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

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

Дальнейшие действия

Тема создания веб-приложений, в которых вход пользователей выполняется с помощью платформы удостоверений Майкрософт, подробно рассматривается в нашей серии сценариев:

В этом кратком руководстве вы скачайте и запустите пример кода, демонстрирующий, как веб-приложение Python может выполнять вход пользователей и вызывать microsoft API Graph. Вход в приложение могут выполнять пользователи с личной учетной записью Майкрософт или учетной записью в любой организации Azure Active Directory (Azure AD).

На следующей схеме показано, как работает пример приложения.

Схема: работа примера приложения, созданного при работе с этим кратким руководством.

  1. Приложение использует пакет для identity получения маркера доступа от платформы удостоверений Майкрософт.
  2. Маркер доступа используется в качестве маркера носителя для проверки подлинности пользователя при вызове microsoft API Graph.

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

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

Чтобы зарегистрировать приложение в портал Azure, выполните следующие действия.

  1. Войдите на портал Azure.
  2. Если у вас есть доступ к нескольким клиентам, в верхнем меню используйте фильтр Каталог и подписка, чтобы выбрать клиент, в котором следует зарегистрировать приложение.
  3. Перейдите на страницу Регистрация приложений портала и выберите Новая регистрация.
  4. Введите имя приложения, например python-webapp.
  5. В разделе Поддерживаемые типы учетных записей выберите Accounts in any organizational directory and personal Microsoft accounts (Учетные записи в любом каталоге организации и личные учетные записи Майкрософт).
  6. В разделе URI перенаправления выберите Веб для платформы.
  7. Введите URI перенаправления http://localhost:5000/getAToken. Его можно изменить позже.
  8. Выберите Зарегистрировать.

Шаг 2. Добавление секрета клиента

  1. На странице приложения Обзор запишите идентификатор приложения (клиента) для использования в будущем.
  2. В разделе Управление выберите Страницы и сертификаты, а затем в разделе Секреты клиента выберите Новый секрет клиента.
  3. Введите описание секрета клиента, оставьте срок действия по умолчанию и нажмите кнопку Добавить.
  4. Сохраните значениесекрета клиента в безопасном расположении. Он понадобится для настройки кода, и вы не сможете получить его позже.

Шаг 3. Добавление область

  1. В разделе Управление выберите Разрешения API>Добавить разрешение.
  2. Убедитесь, что выбрана вкладка API Майкрософт.
  3. В разделе Часто используемые интерфейсы API Microsoft выберите Microsoft Graph.
  4. В разделе Делегированные разрешения убедитесь, что выбран параметр User.ReadBasic.All . При необходимости используйте поле поиска.
  5. Выберите Добавить разрешения.

Шаг 4. Скачивание примера приложения

Скачайте пример кода Python или клонируйте репозиторий:

git clone https://github.com/Azure-Samples/ms-identity-python-webapp.git

Для открытия папки также можно использовать интегрированную среду разработки.

Шаг 5. Настройка примера приложения

  1. Перейдите в папку приложения.

  2. Создайте ENV-файл в корневой папке проекта, используя .env.sample в качестве руководства.

    CLIENT_ID=<client id>
    CLIENT_SECRET=<client secret>
    
    # The AUTHORITY variable expects a full authority URL.
    #
    # If you are using an AAD tenent, configure it as
    # "https://login.microsoftonline.com/TENANT_GUID"
    # or "https://login.microsoftonline.com/subdomain.onmicrosoft.com".
    #
    # If you are using a CIAM tenant, configure it as "https://subdomain.ciamlogin.com"
    #
    # Alternatively, leave it undefined if you are building a multi-tenant app in world-wide cloud
    #AUTHORITY=<authority url>
    
    • Задайте значение идентификатора CLIENT_IDприложения (клиента) для зарегистрированного приложения, доступного на странице обзора.
    • Задайте значение секрета клиента, созданного CLIENT_SECRET в разделе Секреты сертификатов & для зарегистрированного приложения.
    • Задайте для значения AUTHORITY URL-адрес, включающий идентификатор каталога (клиента) зарегистрированного приложения. Этот идентификатор также доступен на странице обзора.

    Переменные среды ссылаются в файле app_config.py и хранятся в отдельном env-файле , чтобы не использовать систему управления версиями. Предоставленный GITIGNORE-файл не позволяет получить env-файл .

Шаг 6. Запуск примера приложения

  1. Создайте виртуальную среду для приложения:

    py -m venv .venv
    .venv\scripts\activate
    
  2. Установите требования с помощью pip:

    python3 -m pip install -r requirements.txt
    
  3. Запустите приложение из командной строки, указав узел и порт в соответствии с URI перенаправления:

    python3 -m flask run --debug --host=localhost --port=5000
    

    Важно!

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

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

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

Дальнейшие действия

Подробнее о веб-приложениях с поддержкой входа пользователей узнайте в нашей серии сценариев.