Проверка подлинности в облаке с помощью 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.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Пакет SDK для .NET. Установите последний пакет SDK для .NET для вашей платформы.
Подготовка
Создайте приложение ASP.NET Core Razor pages:
dotnet new razor -o azure-ad-b2c
Предыдущая команда создает Razor приложение pages в каталоге с именем azure-ad-b2c.
Совет
Вы можете использовать для создания приложения Visual Studio.
Создайте регистрацию веб-приложения в клиенте. Для URI перенаправления используйте
https://localhost:5001/signin-oidc
. Замените5001
порт, используемый приложением при использовании созданных портов Visual Studio.
Изменение приложения
добавляют в проект пакеты
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
.
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.
- Все остальные значения оставьте как есть.
В 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
области.
- Ссылка указывает на метод действия контроллера
В 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
страницы, использующего этот макет.В Program.cs внесите следующие изменения:
Затем добавьте следующие
using
директивы:using Microsoft.Identity.Web; using Microsoft.Identity.Web.UI; using Microsoft.AspNetCore.Authentication.OpenIdConnect;
Приведенный выше код разрешает ссылки, используемые в следующих шагах.
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 и из нее.
Обновите выделенную строку до
Configure
метода:app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapRazorPages();
Приведенный выше код включает проверку подлинности в ASP.NET Core.
Выполнить приложение
Примечание.
Используйте профиль, соответствующий URI перенаправления приложение Azure регистрации
Выполнить приложение.
dotnet run --launch-profile https
Перейдите к защищенной конечной точке приложения, например
https://localhost:5001/
.- Страница индекса отрисовывается без проблем проверки подлинности.
- Заголовок содержит ссылку для входа , так как вы не прошли проверку подлинности.
Выберите ссылку Privacy.
- Браузер перенаправляется в настроенный метод проверки подлинности клиента.
- После входа заголовок отображает приветственное сообщение и ссылку выхода .
Следующие шаги
В этом руководстве вы узнали, как настроить приложение ASP.NET Core для проверки подлинности с помощью Azure AD B2C.
Теперь, когда приложение ASP.NET Core настроено на использование Azure AD B2C для проверки подлинности, атрибут авторизации можно использовать для защиты приложения. Продолжайте разработку приложения, научившись:
- Настройте пользовательский интерфейс Azure AD B2C.
- Настройте требования к сложности паролей.
- Включите многофакторную проверку подлинности.
- Настройте дополнительные поставщики удостоверений, такие как Microsoft, Facebook, Google, Amazon, Twitter и другие.
- Используйте API Microsoft Graph для получения дополнительных сведений о пользователе, таких как членство в группах, из клиента Azure AD B2C.
- Защита веб-API, созданного с помощью ASP.NET Core, с помощью Azure AD B2C.
- Руководство. Предоставление доступа к веб-API ASP.NET с помощью Azure Active Directory B2C.
ASP.NET Core