Веб-приложение, которое реализует вход пользователей: конфигурация кода

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

Библиотеки Майкрософт, поддерживающие веб-приложения

Для защиты веб-приложения (и веб-API) используются следующие библиотеки Майкрософт:

Язык или платформа Проект на сайте
GitHub
Пакет Получение
запущен
Выполнение входа пользователей Доступ к веб-API Общедоступная версия (GA) или
Общедоступная предварительная версия1
.NET MSAL.NET Microsoft.Identity.Client Library cannot request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
.NET Microsoft.IdentityModel Microsoft.IdentityModel Library cannot request ID tokens for user sign-in.2 Library cannot request access tokens for protected web APIs.2 GA
ASP.NET Core ASP.NET Core Microsoft.AspNetCore.Authentication Краткое руководство Library can request ID tokens for user sign-in. Library cannot request access tokens for protected web APIs. GA
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web Краткое руководство Library can request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
Java MSAL4J msal4j Краткое руководство Library can request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
Node.js MSAL Node msal-node Краткое руководство Library can request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
Python MSAL Python msal Краткое руководство Library can request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA

1Дополнительные условия использования предварительных версий Microsoft Azure применяются к библиотекам в общедоступной предварительной версии.

2 Библиотека Microsoft.IdentityModel только проверяет маркеры и не может запрашивать идентификаторы или маркеры доступа.

Выберите вкладку, соответствующую интересующей вас платформе:

Фрагменты кода в этой и следующей статье извлекаются из пошагового руководства по веб-приложению ASP.NET Core, глава 1.

В этом руководстве представлены подробные сведения о реализации.

Файлы конфигурации.

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

  • Облачный экземпляр (Instance), если приложение должно, к примеру, выполняться в национальных облаках.
  • Аудитория в идентификаторе клиента (TenantId).
  • Идентификатор клиента (ClientId) для приложения, соответствующий скопированному с портала Microsoft Azure.

Кроме того, могут отображаться ссылки на Authority. Значение Authority представляет собой объединение значений Instance и TenantId.

В ASP.NET Core эти параметры находятся в файле appsettings.json в разделе "AzureAd".

{
  "AzureAd": {
    // Azure cloud instance among:
    // - "https://login.microsoftonline.com/" for Azure public cloud
    // - "https://login.microsoftonline.us/" for Azure US government
    // - "https://login.microsoftonline.de/" for Azure AD Germany
    // - "https://login.partner.microsoftonline.cn/common" for Azure AD China operated by 21Vianet
    "Instance": "https://login.microsoftonline.com/",

    // Azure AD audience among:
    // - "TenantId" as a GUID obtained from the Azure portal to sign in users in your organization
    // - "organizations" to sign in users in any work or school account
    // - "common" to sign in users with any work or school account or Microsoft personal account
    // - "consumers" to sign in users with a Microsoft personal account only
    "TenantId": "[Enter the tenantId here]",

    // Client ID (application ID) obtained from the Azure portal
    "ClientId": "[Enter the Client Id]",
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-oidc"
  }
}

В ASP.NET Core другой файл (properties\launchSettings.json) contains the URL (applicationUrl) and the TLS/SSL port (sslPort) для приложения и разных профилей.

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:3110/",
      "sslPort": 44321
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "webApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:3110/"
    }
  }
}

На портале Azure URI перенаправления, регистрируемые на странице Аутентификация приложения, должны соответствовать этим URL-адресам. Для двух предыдущих файлов конфигурации это будет https://localhost:44321/signin-oidc. Причина в том, что этот applicationUrl имеет значение http://localhost:3110, но указан sslPort (44321). CallbackPath имеет значение /signin-oidc, как определено в appsettings.json.

Таким же образом для URI выхода будет задано значение https://localhost:44321/signout-oidc.

Примечание

SignedOutCallbackPath должен вести к порталу или к приложению, чтобы избежать конфликта во время обработки события.

Код инициализации

Код инициализации может меняться в зависимости от платформы. Для ASP.NET Core и ASP.NET вход пользователей в систему делегируется программному обеспечению промежуточного слоя OpenID Connect. Шаблон ASP.NET или ASP.NET Core создает веб-приложения для конечной точки Azure Active Directory (Azure AD) версии 1.0. Для адаптации к платформе Microsoft Identity требуется определенная конфигурация. В случае Java обработку выполняет служба Spring совместно с приложением.

В веб-приложениях (и веб-API) ASP.NET Core приложение защищено, поскольку у вас есть атрибут [Authorize] на контроллерах или в действиях контроллера. Этот атрибут проверяет, прошел ли пользователь проверку подлинности. Код, инициализирующий приложение, находится в файле Startup.cs.

Чтобы добавить проверку подлинности на платформе Microsoft Identity (прежнее название — Azure AD версии 2.0), необходимо добавить следующий код. Комментарии в коде должны быть описательными.

Примечание

Если надо начать непосредственно с новых шаблонов ASP.NET Core для платформы Microsoft Identity, использующих Microsoft.Identity.Web, можно загрузить предварительную версию пакета NuGet, содержащую шаблоны проектов для .NET Core 3.1 и .NET 5.0. После установки можно напрямую создать экземпляр веб-приложений ASP.NET Core (MVC или Blazor). Дополнительные сведения см. в статье Шаблоны проектов веб-приложений Microsoft.Identity.Web. Это простейший способ, поскольку все действия, описанные ниже, будут выполнены за вас.

Если вы предпочитаете запускать проект с текущим веб-проектом ASP.NET Core по умолчанию в Visual Studio или с помощью dotnet new mvc --auth SingleOrg или dotnet new webapp --auth SingleOrg, будет отображаться код, подобный следующему:

 services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
         .AddAzureAD(options => Configuration.Bind("AzureAd", options));

В этом коде используется устаревший пакет NuGet Microsoft.AspNetCore.Authentication.AzureAD.UI, который используется для создания приложения Azure AD версии 1.0. В этой статье приведены объяснения по созданию приложения платформы Microsoft Identity (Azure AD 2.0), заменяющего этот код.

  1. Добавьте в проект пакеты NuGet Microsoft.Identity.Web и Microsoft.Identity.Web.UI. Удалите пакет NuGet Microsoft.AspNetCore.Authentication.AzureAD.UI, если он имеется.

  2. Обновите код в ConfigureServices, чтобы он использовал методы AddMicrosoftIdentityWebAppAuthentication и AddMicrosoftIdentityUI.

    public class Startup
    {
     ...
     // This method gets called by the runtime. Use this method to add services to the container.
     public void ConfigureServices(IServiceCollection services)
     {
      services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAd");
    
      services.AddRazorPages().AddMvcOptions(options =>
      {
       var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
       options.Filters.Add(new AuthorizeFilter(policy));
      }).AddMicrosoftIdentityUI();
    
  3. В методе Configure в Startup.cs включите проверку подлинности с помощью обращения к app.UseAuthentication();.

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
     // more code here
     app.UseAuthentication();
     app.UseAuthorization();
     // more code here
    }
    

В приведенном выше коде:

  • AddMicrosoftIdentityWebAppAuthenticationМетод расширения определен в Microsoft.Identity.Web. Этот код выполняет нижеуказанные действия.

    • Добавляет службу аутентификации.
    • Настраивает параметры для чтения файла конфигурации (здесь из раздела "AzureAD").
    • Настраивает параметры OpenID Connect, чтобы центр сертификации был платформой Microsoft Identity.
    • Проверяет издателя маркера.
    • Гарантирует, что утверждения, соответствующие имени, сопоставлены с утверждением preferred_username маркере идентификации.
  • В дополнение к объекту конфигурации можно указать имя раздела конфигурации при вызове AddMicrosoftIdentityWebAppAuthentication. По умолчанию это AzureAd.

  • AddMicrosoftIdentityWebAppAuthentication имеет другие параметры для расширенных сценариев. Например, трассировка событий программного обеспечения промежуточного слоя OpenID Connect позволяет устранить неполадки в веб-приложении, если проверка подлинности не работает. При установке необязательного параметра subscribeToOpenIdConnectMiddlewareDiagnosticsEvents в true будет показано, как обрабатывается информация набором программного обеспечения промежуточного слоя ASP.NET Core по мере перехода от HTTP-ответа к удостоверению пользователя в HttpContext.User.

  • Метод расширения AddMicrosoftIdentityUI определен в Microsoft.Identity.Web.UI. Он предоставляет контроллер по умолчанию для управления входом и выходом.

Дополнительные сведения о том, как Microsoft.Identity.Web обеспечивает создание приложений, см. под адресу https://aka.ms/ms-id-web/webapp

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

В следующей статье вы узнаете, как активировать вход и выход.

Перейдите к следующей статье в этом сценарии, Вход и выход.