Руководство. Настройка веб-приложения ASP.NET Core для авторизации и проверки подлинности
применяется к: арендаторы рабочей силы
внешние клиенты (подробнее)
В этом руководстве вы добавите элементы проверки подлинности и авторизации в веб-приложение ASP.NET Core. В предыдущем руководстве вы создали проект ASP.NET Core и настроили его для проверки подлинности.
В этом руководстве:
- Добавление элементов авторизации и проверки подлинности в код
- Включение просмотра утверждений в маркере идентификатора
- Добавление возможностей входа и выхода
Необходимые условия
- Завершение предварительных требований и шагов в руководстве . Настройка веб-приложения ASP.NET Core, которое проверяет подлинность пользователей.
Добавление элементов проверки подлинности и авторизации
Файлы HomeController.cs и Program.cs необходимо изменить, чтобы добавить элементы проверки подлинности и авторизации в веб-приложение ASP.NET Core. Это включает управление домашней страницей, добавление корректных пространств имен и конфигурацию входа.
Добавление авторизации в HomeController.cs
Домашняя страница приложения должна иметь возможность авторизовать пользователя. Пространство имен Microsoft.AspNetCore.Authorization
предоставляет классы и интерфейсы для реализации авторизации в веб-приложении. Атрибут [Authorize]
используется для указания того, что только прошедшие проверку подлинности пользователи могут использовать веб-приложение.
В веб-приложении откройте контроллеры /HomeController.csи добавьте следующий фрагмент в начало файла:
using System.Diagnostics; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using dotnetcore_webapp.Models;
Добавьте атрибут
[Authorize]
над определением классаHomeController
, как показано в следующем фрагменте кода:[Authorize] public class HomeController : Controller { ...
Добавление элементов проверки подлинности и авторизации в Program.cs
Файл Program.cs является точкой входа приложения и необходимо изменить для добавления проверки подлинности и авторизации в веб-приложение. Необходимо добавить службы, чтобы разрешить приложению использовать параметры, определенные в appsettings.json для проверки подлинности.
Добавьте следующие пространства имен в начало файла.
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;
Затем добавьте службу проверки подлинности веб-приложения Microsoft Identity Web App, которая настраивает приложение на использование удостоверений Майкрософт для проверки подлинности.
// 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. // 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();
Добавление интерфейса входа и выхода
Пользовательский интерфейс должен быть обновлен, чтобы обеспечить более удобный интерфейс для входа и выхода. В этом разделе показано, как создать новый файл, отображающий элементы навигации на основе состояния проверки подлинности пользователя. Код считывает утверждения маркера идентификатора, чтобы убедиться, что пользователь прошел проверку подлинности и использует User.Claims
для извлечения утверждений маркера идентификатора.
Создайте файл в Views/Shared и присвойте ему имя _LoginPartial.cshtml.
Откройте файл и добавьте следующий код для добавления интерфейса входа и выхода:
@using System.Security.Principal <ul class="navbar-nav"> @if (User.Identity is not null && User.Identity.IsAuthenticated) { <li class="nav-item"> <span class="nav-link text-dark">Hello @User.Claims.First(c => c.Type == "preferred_username").Value!</span> </li> <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>
Откройте Views/Shared/_Layout.cshtml и добавьте ссылку на
_LoginPartial
, созданную на предыдущем шаге. Поместите его в конец классаnavbar-nav
, как показано в следующем фрагменте кода:<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>
Использование личного домена URL-адреса (необязательно)
применяется к: арендаторы рабочей силы
внешние клиенты (подробнее)
Используйте собственный домен для полного брендирования URL-адреса проверки подлинности. С точки зрения пользователя пользователи остаются в домене во время процесса проверки подлинности, а не перенаправляются на имя домена ciamlogin.com.
Выполните следующие действия, чтобы использовать личный домен:
Воспользуйтесь шагами, описанными в Включение пользовательского URL-домена для приложений во внешних клиентах, чтобы включить пользовательский URL-домен для внешнего клиента.
Откройте файл appsettings.json:
- Обновите параметры
Instance
иTenantId
для свойстваAuthority
. - Добавьте следующую строку к значению
Authority
дляhttps://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here
. ЗаменитеEnter_the_Custom_Domain_Here
доменом личного URL-адреса иEnter_the_Tenant_ID_Here
идентификатором клиента. Если у вас нет идентификатора арендатора, ознакомьтесь с тем, как прочитать сведения об арендаторе. - Добавьте свойство
knownAuthorities
со значением [Enter_the_Custom_Domain_Here].
- Обновите параметры
После внесения изменений в файл appsettings.json, если ваш личный URL-адрес login.contoso.com, и идентификатор арендатора aaaabbbb-0000-cccc-1111-dddd2222eeee, ваш файл должен выглядеть следующим образом:
{
"AzureAd": {
"Authority": "https://login.contoso.com/aaaabbbb-0000-cccc-1111-dddd2222eeee",
"ClientId": "Enter_the_Application_Id_Here",
"ClientCertificates": [
{
"SourceType": "StoreWithThumbprint",
"CertificateStorePath": "CurrentUser/My",
"CertificateThumbprint": "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00"
}
],
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-callback-oidc",
"KnownAuthorities": ["login.contoso.com"]
...