Проверка подлинности в облаке с помощью Azure Active Directory B2C в ASP.NET Core

Дэмиен Бод

Azure Active Directory B2C (Azure AD B2C ) — это решение для управления облачными удостоверениями для веб-приложений и мобильных приложений. Служба обеспечивает проверку подлинности для приложений, размещенных в облаке и локальной среде. Типы проверки подлинности включают отдельные учетные записи, учетные записи социальных сетей и федеративные корпоративные учетные записи. Кроме того, Azure AD B2C может предоставлять многофакторную проверку подлинности с минимальной конфигурацией.

Совет

Идентификатор Microsoft Entra, Внешняя идентификация Microsoft Entra и Azure AD B2C являются отдельными предложениями продуктов. Клиент Идентификатора записи обычно представляет организацию, а клиент Azure AD B2C или клиент Внешняя идентификация Microsoft Entra может представлять коллекцию удостоверений, которые будут использоваться с приложениями проверяющей стороны. Дополнительные сведения см. в статье Azure AD B2C: часто задаваемые вопросы и ответы.

Совет

Внешняя идентификация Microsoft Entra для клиентов — это новое решение microsoft identity and access management (CIAM).

В этом руководстве описано, как настроить приложение ASP.NET Core для проверки подлинности с помощью Azure AD B2C.

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

Подготовка

  1. Создание клиента Azure Active Directory B2C.

  2. Создайте приложение ASP.NET Core Razor pages:

    dotnet new razor -o azure-ad-b2c
    

    Предыдущая команда создает Razor приложение pages в каталоге с именем azure-ad-b2c.

  3. Создайте регистрацию веб-приложения в клиенте. Для URI перенаправления используйте https://localhost:5001/signin-oidc. Замените 5001 порт, используемый приложением при использовании созданных портов Visual Studio.

Изменение приложения

  1. добавляют в проект пакеты Microsoft.Identity.Web и Microsoft.Identity.Web.UI; Если вы используете Visual Studio, можно использовать диспетчер пакетов NuGet .

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

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

    • Microsoft.Identity.Web включает базовый набор зависимостей для проверки подлинности с помощью платформы Майкрософт Identity .
    • Microsoft.Identity.Web.UI включает функции пользовательского интерфейса, инкапсулированные в области с именем MicrosoftIdentity.
  2. AzureADB2C Добавление объекта в appsettings.json.

    Примечание.

    При использовании потоков пользователей Azure B2C необходимо задать экземпляр и Идентификатор политики типа потока.

    {
      "AzureADB2C": {
        "Instance": "https://--your-domain--.b2clogin.com",
        "Domain": "[Enter the domain of your B2C tenant, e.g. contoso.onmicrosoft.com]",
        "TenantId": "[Enter 'common', or 'organizations' or the Tenant Id (Obtained from the Azure portal. Select 'Endpoints' from the 'App registrations' blade and use the GUID in any of the URLs), e.g. da41245a5-11b3-996c-00a8-4d99re19f292]",
        "ClientId": "[Enter the Client Id (Application ID obtained from the Azure portal), e.g. ba74781c2-53c2-442a-97c2-3d60re42f403]",
        // Use either a secret or a certificate. ClientCertificates are recommended.
        "ClientSecret": "[Copy the client secret added to the app from the Azure portal]",
        "ClientCertificates": [
        ],
        // the following is required to handle Continuous Access Evaluation challenges
        "ClientCapabilities": [ "cp1" ],
        "CallbackPath": "/signin-oidc",
        // Add your policy here
        "SignUpSignInPolicyId": "B2C_1_signup_signin",
        "SignedOutCallbackPath": "/signout-callback-oidc"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*"
    }
    
    • Для домена используйте домен клиента Azure AD B2C.
    • Для ClientId используйте идентификатор приложения (клиента) из регистрации приложения, созданной в клиенте.
    • Например, используйте домен клиента Azure AD B2C.
    • Для SignUpSignInPolicyId используйте политику потока пользователя, определенную в клиенте Azure B2C.
    • Используйте конфигурацию ClientSecret или ClientCertificates. Рекомендуется использовать clientCertificates.
    • Все остальные значения оставьте как есть.
  3. В Pages/Shared создайте файл с именем _LoginPartial.cshtml. Включите следующий код:

    @using System.Security.Principal
    
    <ul class="navbar-nav">
    @if (User.Identity?.IsAuthenticated == true)
    {
            <span class="navbar-text text-dark">Hello @User.Identity?.Name!</span>
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
            </li>
    }
    else
    {
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
            </li>
    }
    </ul>
    

    Предыдущий код:

    • Проверяет, прошел ли пользователь проверку подлинности.
    • Отображает ссылку " Выход" или "Вход" соответствующим образом.
      • Ссылка указывает на метод действия контроллера Account в MicrosoftIdentity области.
  4. В Pages/Shared/_Layout.cshtml добавьте выделенную строку в <header> элементе:

    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">azure_ad_b2c</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    

    Добавление <partial name="_LoginPartial" /> частичного представления в каждом запросе _LoginPartial.cshtml страницы, использующего этот макет.

  5. В Program.cs внесите следующие изменения:

    1. Затем добавьте следующие using директивы:

      using Microsoft.Identity.Web;
      using Microsoft.Identity.Web.UI;
      using Microsoft.AspNetCore.Authentication.OpenIdConnect;
      

      Приведенный выше код разрешает ссылки, используемые в следующих шагах.

    2. builder.Services Обновите строки со следующим кодом:

      builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
              .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureADB2C"));
      
      builder.Services.AddAuthorization(options =>
      {
          // By default, all incoming requests will be authorized according to 
          // the default policy
          options.FallbackPolicy = options.DefaultPolicy;
      });
      builder.Services.AddRazorPages(options => {
          options.Conventions.AllowAnonymousToPage("/Index");
      })
      .AddMvcOptions(options => { })
      .AddMicrosoftIdentityUI();
      

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

      • AddAuthentication Вызовы и AddMicrosoftIdentityWebApp методы настройки приложения для использования open ID Подключение, специально настроенных для платформы МайкрософтIdentity.
      • AddAuthorization инициализирует авторизацию ASP.NET Core.
      • Вызов AddRazorPages настраивает приложение, чтобы анонимные браузеры могли просматривать страницу индекса. Все остальные запросы требуют проверки подлинности.
      • AddMvcOptions и AddMicrosoftIdentityUI добавьте необходимые компоненты пользовательского интерфейса для перенаправления в Azure AD B2C и из нее.
    3. Обновите выделенную строку до Configure метода:

      app.UseRouting();
      
      app.UseAuthentication();
      app.UseAuthorization();
      
      app.MapRazorPages();
      

      Приведенный выше код включает проверку подлинности в ASP.NET Core.

Выполнить приложение

Примечание.

Используйте профиль, соответствующий URI перенаправления приложение Azure регистрации

  1. Выполнить приложение.

    dotnet run --launch-profile https
    
  2. Перейдите к защищенной конечной точке приложения, например https://localhost:5001/.

    • Страница индекса отрисовывается без проблем проверки подлинности.
    • Заголовок содержит ссылку для входа , так как вы не прошли проверку подлинности.
  3. Выберите ссылку Privacy.

    • Браузер перенаправляется в настроенный метод проверки подлинности клиента.
    • После входа заголовок отображает приветственное сообщение и ссылку выхода .

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

В этом руководстве вы узнали, как настроить приложение ASP.NET Core для проверки подлинности с помощью Azure AD B2C.

Теперь, когда приложение ASP.NET Core настроено на использование Azure AD B2C для проверки подлинности, атрибут авторизации можно использовать для защиты приложения. Продолжайте разработку приложения, научившись: