Руководство. Подготовка веб-приложения ASP.NET Core для проверки подлинности во внешнем клиенте
Это руководство является частью 2 серии, которая демонстрирует, как создать веб-приложение ASP.NET Core и подготовить его к проверке подлинности с помощью Центра администрирования Microsoft Entra. В части 1 этой серии вы зарегистрировали приложение и настроили потоки пользователей во внешнем клиенте. В этом руководстве показано, как создать веб-приложение ASP.NET Core и настроить его для проверки подлинности.
В этом руководстве вы получите следующее:
- Создание проекта ASP.NET Core в Visual Studio Code
- Добавление необходимых пакетов NuGet
- Настройка параметров для приложения
- Добавление кода для реализации проверки подлинности
Необходимые компоненты
- Руководство. Подготовка внешнего клиента к созданию веб-приложения ASP.NET Core.
- Хотя можно использовать любую интегрированную среду разработки (IDE), поддерживающую ASP.NET основные приложения, в этом руководстве используется Visual Studio Code. Его можно скачать здесь.
- Пакет SDK для .NET 7.0.
Создание проекта ASP.NET Core
Откройте Visual Studio Code, выберите "Открыть папку">.... Перейдите к папке и выберите расположение, в котором нужно создать проект.
Откройте новый терминал, выбрав терминал>"Новый терминал".
Введите следующую команду, чтобы сделать проект контроллера представления модели (MVC) ASP.NET Core.
dotnet new mvc -n dotnetcore_webapp
Установка пакетов удостоверений
Пакеты NuGet, связанные с удостоверениями, должны быть установлены в проекте для проверки подлинности пользователей.
Введите следующие команды, чтобы перейти в папку dotnetcore_webapp и установить соответствующий пакет NuGet:
cd dotnetcore_webapp dotnet add package Microsoft.Identity.Web.UI
Настройка приложения для проверки подлинности
Откройте файл 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
— это идентификатор, помогающий серверу перенаправлять ответ на соответствующее приложение.
Сохраните изменения в файле .
Откройте файл Properties/launchSettings.json.
В разделе измените
https
https
URL-адресapplicationUrl
таким образом, чтобы он считывалhttps://localhost:7274
.profiles
Этот URL-адрес использовался для определения URI перенаправления.Сохраните изменения в файле.
Использование личного домена URL-адреса (необязательно)
Используйте личный домен для полной фирменной символики URL-адреса проверки подлинности. С точки зрения пользователя пользователи остаются в домене во время проверки подлинности, а не перенаправляются на ciamlogin.com доменное имя.
Выполните следующие действия, чтобы использовать личный домен:
Выполните действия, описанные в разделе "Включение пользовательских доменов URL-адресов" для приложений во внешних клиентах , чтобы включить личный ДОМЕН URL-адресов для внешнего клиента.
Откройте файл appsettings.json :
- Измените значение
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-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]
атрибут используется для указания того, что только прошедшие проверку подлинности пользователи могут использовать веб-приложение.
В редакторе кода откройте файл Controllers\HomeController.cs .
Необходимо добавить авторизацию к контроллеру,
Microsoft.AspNetCore.Authorization
чтобы верхняя часть файла была идентична следующему фрагменту кода:using System.Diagnostics; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using dotnetcore_webapp.Models;
Кроме того, добавьте
[Authorize]
атрибут непосредственно над определениемHomeController
класса.[Authorize]
Добавление проверки подлинности и авторизации в Program.cs
Для добавления проверки подлинности и авторизации в веб-приложение необходимо изменить Program.cs. Это включает добавление пространств имен для проверки подлинности и авторизации, а также возможность входа пользователей с помощью платформа удостоверений Майкрософт.
Чтобы добавить необходимые пространства имен, откройте 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;
Затем добавьте службы проверки подлинности в приложение, которое позволит веб-приложению входить пользователей с помощью платформа удостоверений Майкрософт. Остальную часть кода можно заменить в 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();