Поделиться через


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

В этой статье описывается, как настроить код для веб-приложения, выполняющего вход пользователей.

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

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

Язык или платформа Проект на сайте
GitHub
Пакет Получение
из этих вариантов
Выполнение входа пользователей Доступ к веб-API Общедоступная версия (GA) или
Общедоступная предварительная версия1
.NET MSAL для .NET Microsoft.Identity.Client Библиотека не может запрашивать маркеры идентификаторов для входа пользователя. Библиотека может запросить маркеры доступа для защищенных веб-API. Общедоступная версия
.NET Microsoft.IdentityModel Microsoft.IdentityModel Библиотека не может запрашивать маркеры идентификаторов для входа пользователя.2 Библиотека не может запрашивать маркеры доступа для защищенных веб-API.2 Общедоступная версия
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web Краткое руководство Библиотека может запросить маркеры идентификатора для входа пользователя. Библиотека может запросить маркеры доступа для защищенных веб-API. Общедоступная версия
Java MSAL4J msal4j Краткое руководство Библиотека может запросить маркеры идентификатора для входа пользователя. Библиотека может запросить маркеры доступа для защищенных веб-API. Общедоступная версия
Spring spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory Руководство Библиотека может запросить маркеры идентификатора для входа пользователя. Библиотека может запросить маркеры доступа для защищенных веб-API. Общедоступная версия
Node.js Узел MSAL msal-node Краткое руководство Библиотека может запросить маркеры идентификатора для входа пользователя. Библиотека может запросить маркеры доступа для защищенных веб-API. Общедоступная версия
Python MSAL Python msal Библиотека может запросить маркеры идентификатора для входа пользователя. Библиотека может запросить маркеры доступа для защищенных веб-API. Общедоступная версия
Python identity identity Краткое руководство Библиотека может запросить маркеры идентификатора для входа пользователя. Библиотека может запросить маркеры доступа для защищенных веб-API. --

(1) Условия универсального лицензионного соглашения для веб-служб применяются к библиотекам в общедоступной предварительной версии.

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

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

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

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

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

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

  • Облачный экземпляр, если вы хотите, чтобы ваше приложение выполнялось в национальных облаках, например. К разным параметрам относятся;
    • https://login.microsoftonline.com/ для общедоступного облака Azure
    • https://login.microsoftonline.us/ для государственных организаций США
    • https://login.microsoftonline.de/ для Microsoft Entra Germany
    • https://login.partner.microsoftonline.cn/common для Microsoft Entra China, управляемый 21Vianet
  • Аудитория в идентификаторе клиента. Параметры зависят от того, является ли ваше приложение одним клиентом или мультитенантным.
    • GUID клиента, полученный из портал Azure для входа пользователей в организации. Вы также можете использовать доменное имя.
    • organizations вход пользователей в любой рабочей или учебной учетной записи
    • commonвход пользователей с помощью рабочей или учебной учетной записи или Microsoft личная учетная запись
    • consumersвход пользователей только с помощью личная учетная запись Майкрософт
  • Идентификатор клиента приложения, скопированный из портал Azure

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

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

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "[Enter the tenantId here]",

    // Client ID (application ID) obtained from the Azure portal
    "ClientId": "[Enter the Client Id here]",
    "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 AD версии 1.0. Для адаптации к платформе Microsoft Identity требуется определенная конфигурация.

В веб-приложениях (и веб-API) ASP.NET Core приложение защищено, поскольку у вас есть атрибут Authorize на контроллерах или в действиях контроллера. Этот атрибут проверяет, прошел ли пользователь проверку подлинности. До выпуска .NET 6 инициализация кода была в файле Startup.cs . В новых проектах ASP.NET Core с .NET 6 файла Startup.cs больше нет. Вместо него используется файл Program.cs. Остальная часть этого учебника относится к .NET 5 или более ранней версии.

Примечание.

Если вы хотите начать непосредственно с новых шаблонов ASP.NET Core для платформа удостоверений Майкрософт, использующих Microsoft.Identity.Web, можно скачать предварительный просмотр пакета NuGet, содержащего шаблоны проектов для .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 Active Directory версии 1.0. В этой статье объясняется, как создать приложение платформа удостоверений Майкрософт версии 2.0, которое заменяет этот код.

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

  2. Обновите код в ConfigureServices, чтобы он использовал методы AddMicrosoftIdentityWebApp и 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.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
             .AddMicrosoftIdentityWebApp(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(); и app.MapControllers();.

    // 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();
    
     app.MapRazorPages();
     app.MapControllers();
     // more code here
    }
    

В этом коде:

  • Метод AddMicrosoftIdentityWebApp расширения определен в Microsoft.Identity.Web, который;

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

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

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

Дополнительные сведения о том, как создавать веб-приложения с помощью Microsoft.Identity.Web, см. в разделе Веб-приложения в microsoft-identity-web.

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