Веб-приложение, которое реализует вход пользователей: конфигурация кода
В этой статье описывается, как настроить код для веб-приложения, выполняющего вход пользователей.
Библиотеки Майкрософт, поддерживающие веб-приложения
Для защиты веб-приложения (и веб-API) используются следующие библиотеки Майкрософт:
Язык или платформа | Проект на сайте GitHub |
Пакет | Получение из этих вариантов |
Выполнение входа пользователей | Доступ к веб-API | Общедоступная версия (GA) или Общедоступная предварительная версия1 |
|
---|---|---|---|---|---|---|---|
.NET | MSAL для .NET | Microsoft.Identity.Client | — | Общедоступная версия | |||
.NET | Microsoft.IdentityModel | Microsoft.IdentityModel | — | 2 | 2 | Общедоступная версия | |
ASP.NET Core | Microsoft.Identity.Web | Microsoft.Identity.Web | Краткое руководство | Общедоступная версия | |||
Java | MSAL4J | msal4j | Краткое руководство | Общедоступная версия | |||
Spring | spring-cloud-azure-starter-active-directory | spring-cloud-azure-starter-active-directory | Руководство | Общедоступная версия | |||
Node.js | Узел MSAL | msal-node | Краткое руководство | Общедоступная версия | |||
Python | MSAL Python | msal | Общедоступная версия | ||||
Python | identity | identity | Краткое руководство | -- |
(1) Условия универсального лицензионного соглашения для веб-служб применяются к библиотекам в общедоступной предварительной версии.
(2) Библиотека Microsoft.IdentityModel проверяет только маркеры. Он не может запрашивать идентификатор или маркеры доступа.
Выберите вкладку, соответствующую интересующей вас платформе:
Фрагменты кода в этой и следующей статье извлекаются из пошагового руководства по веб-приложению ASP.NET Core, глава 1.
В этом руководстве представлены подробные сведения о реализации.
Файлы конфигурации
Веб-приложения, реализующие вход пользователей с помощью платформы Microsoft Identity, настраиваются с помощью файлов конфигурации. Эти файлы должны указывать следующие значения:
- Облачный экземпляр, если вы хотите, чтобы ваше приложение выполнялось в национальных облаках, например. К разным параметрам относятся;
https://login.microsoftonline.com/
для общедоступного облака Azurehttps://login.microsoftonline.us/
для государственных организаций СШАhttps://login.microsoftonline.de/
для Microsoft Entra Germanyhttps://login.partner.microsoftonline.cn/common
для Microsoft Entra China, управляемый 21Vianet
- Аудитория в идентификаторе клиента. Параметры зависят от того, является ли ваше приложение одним клиентом или мультитенантным.
- GUID клиента, полученный из портал Azure для входа пользователей в организации. Вы также можете использовать доменное имя.
organizations
вход пользователей в любой рабочей или учебной учетной записиcommon
вход пользователей с помощью рабочей или учебной учетной записи или Microsoft личная учетная записьconsumers
вход пользователей только с помощью личная учетная запись Майкрософт
- Идентификатор клиента приложения, скопированный из портал Azure
Вы также можете увидеть ссылки на центр, объединение значений экземпляра и идентификатора клиента.
В ASP.NET Core эти параметры находятся в файле appsettings.json в разделе "Идентификатор Microsoft Entra".
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "[Enter the tenantId here]",
// Client ID (application ID) obtained from the Azure portal
"ClientId": "[Enter the Client Id here]",
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-oidc"
}
}
В ASP.NET Core другой файл (properties\launchSettings.json) contains the URL (applicationUrl
) and the TLS/SSL port (sslPort
) для приложения и разных профилей.
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:3110/",
"sslPort": 44321
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"webApp": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:3110/"
}
}
}
На портале Azure URI перенаправления, регистрируемые на странице Аутентификация приложения, должны соответствовать этим URL-адресам. Для двух предыдущих файлов конфигурации это будет https://localhost:44321/signin-oidc
. Причина заключается в том, что applicationUrl
http://localhost:3110
это , но sslPort
указано (44321
). CallbackPath
имеет значение /signin-oidc
, как определено в appsettings.json
.
Таким же образом для URI выхода будет задано значение https://localhost:44321/signout-oidc
.
Примечание.
SignedOutCallbackPath должен вести к порталу или к приложению, чтобы избежать конфликта во время обработки события.
Код инициализации
Различия кода инициализации зависят от платформы. Для ASP.NET Core и ASP.NET вход пользователей в систему делегируется программному обеспечению промежуточного слоя OpenID Connect. Шаблон ASP.NET или ASP.NET Core создает веб-приложения для конечной точки Azure AD версии 1.0. Для адаптации к платформе Microsoft Identity требуется определенная конфигурация.
В веб-приложениях (и веб-API) ASP.NET Core приложение защищено, поскольку у вас есть атрибут Authorize
на контроллерах или в действиях контроллера. Этот атрибут проверяет, прошел ли пользователь проверку подлинности. До выпуска .NET 6 инициализация кода была в файле Startup.cs . В новых проектах ASP.NET Core с .NET 6 файла Startup.cs больше нет. Вместо него используется файл Program.cs. Остальная часть этого учебника относится к .NET 5 или более ранней версии.
Примечание.
Если вы хотите начать непосредственно с новых шаблонов ASP.NET Core для платформа удостоверений Майкрософт, использующих Microsoft.Identity.Web, можно скачать предварительный просмотр пакета NuGet, содержащего шаблоны проектов для .NET 5.0. После установки можно напрямую создать экземпляр веб-приложений ASP.NET Core (MVC или Blazor). Дополнительные сведения см. в статье Шаблоны проектов веб-приложений Microsoft.Identity.Web. Это самый простой подход, так как он будет выполнять все следующие действия для вас.
Если вы предпочитаете запускать проект с текущим веб-проектом ASP.NET Core по умолчанию в Visual Studio или с помощью dotnet new mvc --auth SingleOrg
или dotnet new webapp --auth SingleOrg
, будет отображаться код, подобный следующему:
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
Этот код использует устаревший пакет NuGet Microsoft.AspNetCore.Authentication.AzureAD.UI , который используется для создания приложения Azure Active Directory версии 1.0. В этой статье объясняется, как создать приложение платформа удостоверений Майкрософт версии 2.0, которое заменяет этот код.
Добавьте в проект пакеты NuGet Microsoft.Identity.Web и Microsoft.Identity.Web.UI.
Microsoft.AspNetCore.Authentication.AzureAD.UI
Удалите пакет NuGet, если он присутствует.Обновите код в
ConfigureServices
, чтобы он использовал методыAddMicrosoftIdentityWebApp
иAddMicrosoftIdentityUI
.public class Startup { ... // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(Configuration, "AzureAd"); services.AddRazorPages().AddMvcOptions(options => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new AuthorizeFilter(policy)); }).AddMicrosoftIdentityUI();
В методе
Configure
в Startup.cs включите проверку подлинности с помощью вызова кapp.UseAuthentication();
иapp.MapControllers();
.// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // more code here app.UseAuthentication(); app.UseAuthorization(); app.MapRazorPages(); app.MapControllers(); // more code here }
В этом коде:
Метод
AddMicrosoftIdentityWebApp
расширения определен в Microsoft.Identity.Web, который;- Настраивает параметры для чтения файла конфигурации (здесь в разделе "Идентификатор Microsoft Entra" )
- Настраивает параметры OpenID Connect, чтобы центр сертификации был платформой Microsoft Identity.
- Проверяет издателя маркера.
- Гарантирует, что утверждения, соответствующие имени, сопоставлены с утверждением
preferred_username
маркере идентификации.
В дополнение к объекту конфигурации можно указать имя раздела конфигурации при вызове
AddMicrosoftIdentityWebApp
. По умолчанию этоAzureAd
.AddMicrosoftIdentityWebApp
имеет другие параметры для расширенных сценариев. Например, трассировка событий программного обеспечения промежуточного слоя OpenID Connect позволяет устранить неполадки в веб-приложении, если проверка подлинности не работает. При установке необязательного параметраsubscribeToOpenIdConnectMiddlewareDiagnosticsEvents
вtrue
будет показано, как обрабатывается информация набором программного обеспечения промежуточного слоя ASP.NET Core по мере перехода от HTTP-ответа к удостоверению пользователя вHttpContext.User
.Метод расширения
AddMicrosoftIdentityUI
определен в Microsoft.Identity.Web.UI. Он предоставляет контроллер по умолчанию для управления входом и выходом.
Дополнительные сведения о том, как создавать веб-приложения с помощью Microsoft.Identity.Web, см. в разделе Веб-приложения в microsoft-identity-web.