Бөлісу құралы:


Руководство. Подготовка веб-приложения ASP.NET Core для проверки подлинности во внешнем клиенте

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

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

  • Создание проекта ASP.NET Core в Visual Studio Code
  • Добавление необходимых пакетов NuGet
  • Настройка параметров для приложения
  • Добавление кода для реализации проверки подлинности

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

Создание проекта ASP.NET Core

  1. Откройте Visual Studio Code, выберите "Открыть папку">.... Перейдите к папке и выберите расположение, в котором нужно создать проект.

  2. Откройте новый терминал, выбрав терминал>"Новый терминал".

  3. Введите следующую команду, чтобы сделать проект контроллера представления модели (MVC) ASP.NET Core.

    dotnet new mvc -n dotnetcore_webapp
    

Установка пакетов удостоверений

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

  1. Введите следующие команды, чтобы перейти в папку dotnetcore_webapp и установить соответствующий пакет NuGet:

    cd dotnetcore_webapp
    dotnet add package Microsoft.Identity.Web.UI
    

Настройка приложения для проверки подлинности

  1. Откройте файл appsettings.json и замените существующий код следующим фрагментом кода.

    {
      "AzureAd": {
        "Authority": "https://Enter_the_Tenant_Subdomain_Here.ciamlogin.com/",
        "ClientId": "Enter_the_Application_Id_Here",
        "ClientCredentials": [
          {
            "SourceType": "ClientSecret",
            "ClientSecret": "Enter_the_Client_Secret_Here"
          }
        ],
        "CallbackPath": "/signin-oidc",
        "SignedOutCallbackPath": "/signout-callback-oidc"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*"
    }
    
    • Authority — Экземпляр поставщика удостоверений и аудитория входа для приложения. Замените Enter_the_Tenant_Subdomain_Here поддомен внешнего клиента. Чтобы найти это, выберите "Обзор" в боковом меню, а затем перейдите на вкладку "Обзор". Найдите основной домен в форме caseyjensen.onmicrosoft.com. Поддомен — caseyjensen.
    • ClientId — идентификатор приложения, который также называется клиентом. Замените текст в кавычках значением идентификатора приложения (клиента), записанным ранее на странице обзора зарегистрированного приложения.
    • ClientSecret — Значение секрета клиента, созданного в разделе "Подготовка клиента". Замените текст в кавычках значением секрета клиента в Центре администрирования Microsoft Entra.
    • CallbackPath — это идентификатор, помогающий серверу перенаправлять ответ на соответствующее приложение.
  2. Сохраните изменения в файле .

  3. Откройте файл Properties/launchSettings.json.

  4. В разделе измените https https URL-адрес applicationUrl таким образом, чтобы он считывалhttps://localhost:7274.profiles Этот URL-адрес использовался для определения URI перенаправления.

  5. Сохраните изменения в файле.

Использование личного домена URL-адреса (необязательно)

Используйте личный домен для полной фирменной символики URL-адреса проверки подлинности. С точки зрения пользователя пользователи остаются в домене во время проверки подлинности, а не перенаправляются на ciamlogin.com доменное имя.

Выполните следующие действия, чтобы использовать личный домен:

  1. Выполните действия, описанные в разделе "Включение пользовательских доменов URL-адресов" для приложений во внешних клиентах , чтобы включить личный ДОМЕН URL-адресов для внешнего клиента.

  2. Откройте файл appsettings.json :

    1. Измените значение Authority свойства https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Hereна . Замените Enter_the_Custom_Domain_Here домен личного URL-адреса и Enter_the_Tenant_ID_Here идентификатором клиента. Если у вас нет идентификатора клиента, узнайте, как прочитать сведения о клиенте.
    2. Добавьте knownAuthorities свойство со значением [Enter_the_Custom_Domain_Here].

После внесения изменений в файл appsettings.json, если личный домен URL-адреса login.contoso.com, а идентификатор клиента — aaaabbbb-0000-cccc-1111-dd222eeee, файл должен выглядеть следующим фрагментом кода:

{
  "AzureAd": {
    "Authority": "https://login.contoso.com/aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "ClientId": "Enter_the_Application_Id_Here",
    "ClientCredentials": [
      {
        "SourceType": "ClientSecret",
        "ClientSecret": "Enter_the_Client_Secret_Here"
      }
    ],
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-callback-oidc",
    "KnownAuthorities": ["login.contoso.com"]
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Добавление авторизации в HomeController.cs

Файл HomeController.cs содержит код домашней страницы приложения и должен иметь возможность авторизовать пользователя. Пространство Microsoft.AspNetCore.Authorization имен предоставляет классы и интерфейсы для реализации авторизации в веб-приложении, а [Authorize] атрибут используется для указания того, что только прошедшие проверку подлинности пользователи могут использовать веб-приложение.

  1. В редакторе кода откройте файл Controllers\HomeController.cs .

  2. Необходимо добавить авторизацию к контроллеру, Microsoft.AspNetCore.Authorization чтобы верхняя часть файла была идентична следующему фрагменту кода:

    using System.Diagnostics;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    using dotnetcore_webapp.Models;
    
  3. Кроме того, добавьте [Authorize] атрибут непосредственно над определением HomeController класса.

    [Authorize]
    

Добавление проверки подлинности и авторизации в Program.cs

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

  1. Чтобы добавить необходимые пространства имен, откройте Program.cs и добавьте следующий фрагмент кода в начало файла:

    using Microsoft.AspNetCore.Authentication.OpenIdConnect;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc.Authorization;
    using Microsoft.Identity.Web;
    using Microsoft.Identity.Web.UI;
    using System.IdentityModel.Tokens.Jwt;
    
  2. Затем добавьте службы проверки подлинности в приложение, которое позволит веб-приложению входить пользователей с помощью платформа удостоверений Майкрософт. Остальную часть кода можно заменить в Program.cs следующим фрагментом кода:

    var builder = WebApplication.CreateBuilder(args);
    
    // Add services to the container.
    builder.Services.AddControllersWithViews();
    
    // This is required to be instantiated before the OpenIdConnectOptions starts getting configured.
    // By default, the claims mapping will map claim names in the old format to accommodate older SAML applications.
    // For instance, 'http://schemas.microsoft.com/ws/2008/06/identity/claims/role' instead of 'roles' claim.
    // This flag ensures that the ClaimsIdentity claims collection will be built from the claims in the token
    JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
    
    // Sign-in users with the Microsoft identity platform
    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(builder.Configuration)
        .EnableTokenAcquisitionToCallDownstreamApi()
        .AddInMemoryTokenCaches();
    
    builder.Services.AddControllersWithViews(options =>
    {
        var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .Build();
        options.Filters.Add(new AuthorizeFilter(policy));
    }).AddMicrosoftIdentityUI();
    
    var app = builder.Build();
    
    // Configure the HTTP request pipeline.
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Home/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    app.UseAuthorization();
    
    app.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    
    app.Run();
    
    

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