События
Чемпионат мира Power BI DataViz
14 февр., 16 - 31 мар., 16
С 4 шансами войти, вы можете выиграть пакет конференции и сделать его в LIVE Grand Finale в Лас-Вегасе
ПодробнееЭтот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Автор: Рик Андерсон (Rick Anderson)
Веб-сайты часто состоят из отдельных веб-приложений, работающих вместе. Чтобы обеспечить единый вход, веб-приложения на сайте должны предоставлять общий доступ к файлам cookie проверки подлинности. Для поддержки этого сценария стек защиты данных позволяет совместно использовать проверку подлинности Katana cookie и ASP.NET билеты на проверку подлинности Core cookie .
В следующих примерах:
.AspNet.SharedCookie
.AuthenticationType
этого задано значение Identity.Application
явным образом или по умолчанию.SharedCookieApp
приложения используется для предоставления системе защиты данных общего доступа к ключам защиты данных.Identity.Application
используется в качестве схемы проверки подлинности. Какую бы схему ни использовалось, она должна использоваться последовательно внутри общих приложений либоcookie в качестве схемы по умолчанию, либо путем явной настройки. Схема используется при шифровании и расшифровке файлов cookie, поэтому согласованная схема должна использоваться в приложениях.DataProtectionProvider
предоставляет службы защиты данных для шифрования и расшифровки полезных данных проверки подлинности cookie . Экземпляр DataProtectionProvider
изолирован от системы защиты данных, используемой другими частями приложения.
DataProtectionProvider.Create(System.IO.DirectoryInfo, ActionDataProtectionBuilder<>) принимает DirectoryInfo расположение хранилища ключей защиты данных.DataProtectionProvider
требуется пакет NuGet Microsoft.AspNetCore.DataProtection.Extensions : При использовании ASP.NET Core Identity:
SharedCookieApp
в следующих примерах). Дополнительные сведения см. в статье Настройка защиты данных в ASP.NET Core.Identity.Application
В Program.cs
:
using Microsoft.AspNetCore.DataProtection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"c:\PATH TO COMMON KEY RING FOLDER"))
.SetApplicationName("SharedCookieApp");
builder.Services.ConfigureApplicationCookie(options => {
options.Cookie.Name = ".AspNet.SharedCookie";
});
var app = builder.Build();
Примечание. Приведенные выше инструкции не работают с ITicketStore
(CookieAuthenticationOptions.SessionStore
). Дополнительные сведения см. здесь на GitHub.
По соображениям безопасности файлы cookie проверки подлинности не сжимаются в ASP.NET Core. При использовании файлов cookie проверки подлинности разработчики должны свести к минимуму количество сведений о утверждениях, включенных только в то, что необходимо для их потребностей.
При использовании файлов cookie непосредственно без ASP.NET Core Identityнастройте защиту данных и проверку подлинности. В следующем примере для типа проверки подлинности задано Identity.Application
значение :
using Microsoft.AspNetCore.DataProtection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"c:\PATH TO COMMON KEY RING FOLDER"))
.SetApplicationName("SharedCookieApp");
builder.Services.AddAuthentication("Identity.Application")
.AddCookie("Identity.Application", options =>
{
options.Cookie.Name = ".AspNet.SharedCookie";
});
var app = builder.Build();
По соображениям безопасности файлы cookie проверки подлинности не сжимаются в ASP.NET Core. При использовании файлов cookie проверки подлинности разработчики должны свести к минимуму количество сведений о утверждениях, включенных только в то, что необходимо для их потребностей.
Проверка подлинности cookie использует httpRequest.PathBase по умолчаниюCookie. Путь. Если приложение cookie должно быть общим для разных базовых путей, Path
необходимо переопределить:
using Microsoft.AspNetCore.DataProtection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"c:\PATH TO COMMON KEY RING FOLDER"))
.SetApplicationName("SharedCookieApp");
builder.Services.ConfigureApplicationCookie(options => {
options.Cookie.Name = ".AspNet.SharedCookie";
options.Cookie.Path = "/";
});
var app = builder.Build();
При размещении приложений, использующих файлы cookie в поддоменах, укажите общий домен в Cookieфайле . Свойство домена . Чтобы предоставить общий доступ к файлам cookie в таких приложениях contoso.com
, как first_subdomain.contoso.com
и second_subdomain.contoso.com
, укажите следующие Cookie.Domain
.contoso.com
значения:
options.Cookie.Domain = ".contoso.com";
Для рабочих развертываний настройте DataProtectionProvider
для шифрования неактивных ключей с помощью DPAPI или X509Certificate. Дополнительные сведения см. в статье Шифрование ключей в Windows и Azure с помощью ASP.NET Core. В следующем примере отпечаток ProtectKeysWithCertificateсертификата предоставляется в следующих случаях:
using Microsoft.AspNetCore.DataProtection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddDataProtection()
.ProtectKeysWithCertificate("{CERTIFICATE THUMBPRINT}");
Если приложения используют одну и ту же схему (ту же Identity версию Identity), убедитесь, что Identity система для каждого приложения указывает на одну и ту же пользовательская база данных. В противном случае система удостоверений приводит к сбоям во время выполнения при попытке сопоставить сведения проверки подлинности в cookie с информацией в базе данных.
Identity Если схема отличается от приложений, обычно так как приложения используют разные Identity версии, совместное использование общей базы данных на основе последней версии Identity невозможно без повторного сопоставления и добавления столбцов в схемы других приложенийIdentity. Часто более эффективно обновить другие приложения, чтобы использовать последнюю Identity версию, чтобы общая база данных была предоставлена приложениям.
В .NET 6 WebApplicationBuilder нормализует корневой путь содержимого, чтобы завершиться с DirectorySeparatorCharпомощью . Большинство приложений, перенесенных из HostBuilder или WebHostBuilder не имеющих того же имени приложения, так как они не нормализованы. Дополнительные сведения см. в разделе SetApplicationName
ASP.NET приложения 4.x, использующие ПО промежуточного слоя проверки подлинности Microsoft.Owin Cookie , можно настроить для создания файлов cookie проверки подлинности, совместимых с по промежуточному поверку ASP.NET Core Cookie Authentication. Это может быть полезно, если веб-приложение состоит из приложений ASP.NET 4.x и приложений ASP.NET Core, которые должны совместно использовать единый вход. Конкретный пример такого сценария заключается в добавочном переносе веб-приложения из ASP.NET в ASP.NET Core. В таких сценариях обычно для некоторых частей приложения, обслуживаемых исходным приложением ASP.NET, а другие — новым приложением ASP.NET Core. Однако пользователям необходимо выполнить вход только один раз. Это можно сделать с помощью любого из следующих подходов:
Чтобы настроить ASP.NET ПО промежуточного слоя проверки подлинности Microsoft.Owin Cookie для совместного использования файлов cookie с приложением ASP.NET Core, следуйте приведенным выше инструкциям, чтобы настроить приложение ASP.NET Core для использования определенного cookie имени, имени приложения и сохранения ключей защиты данных в известном расположении. Дополнительные сведения о сохранении ключей защиты данных см. в разделе "Настройка ASP.NET Core Data Protection ".
В приложении ASP.NET установите Microsoft.Owin.Security.Interop
пакет.
UseCookieAuthentication
Обновите вызов в Startup.Auth.cs, чтобы настроить AspNetTicketDataFormat для сопоставления параметров приложения ASP.NET Core:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
},
// Settings to configure shared cookie with ASP.NET Core app
CookieName = ".AspNet.ApplicationCookie",
AuthenticationType = "Identity.Application",
TicketDataFormat = new AspNetTicketDataFormat(
new DataProtectorShim(
DataProtectionProvider.Create(new DirectoryInfo(@"c:\PATH TO COMMON KEY RING FOLDER"),
builder => builder.SetApplicationName("SharedCookieApp"))
.CreateProtector(
"Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware",
// Must match the Scheme name used in the ASP.NET Core app, i.e. IdentityConstants.ApplicationScheme
"Identity.Application",
"v2"))),
CookieManager = new ChunkingCookieManager()
});
Важные элементы, настроенные здесь, включают:
System.Web.Helpers.AntiForgeryConfig.UniqueClaimTypeIdentifier
установлено утверждение из ASP.NET Core Identity, которое будет уникальным для пользователя.Так как тип проверки подлинности был изменен на соответствие схеме проверки подлинности приложения ASP.NET Core, также необходимо обновить способ создания ASP.NET новых удостоверений для использования этого же имени. Обычно это делается в Models/IdentityModels.cs
:
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, "Identity.Application");
// Add custom user claims here
return userIdentity;
}
}
В этих изменениях приложения ASP.NET и ASP.NET Core могут использовать те же файлы cookie проверки подлинности, чтобы пользователи входить в одно или из одного приложения отражаются в другом приложении.
Обратите внимание, что поскольку существуют различия между ASP.NET и схемами базы данных ASP.NET Identity Core Identity, рекомендуется только для входа пользователей с помощью одного из приложений — ASP.NET или ASP.NET Core. После входа в систему пользователи, описанные в этом разделе, позволят использовать проверку подлинности cookieв любом приложении, а оба приложения смогут выйти из системы.
В следующих примерах:
.AspNet.SharedCookie
.AuthenticationType
этого задано значение Identity.Application
явным образом или по умолчанию.SharedCookieApp
).Identity.Application
используется в качестве схемы проверки подлинности. Какую бы схему ни использовалось, она должна использоваться последовательно внутри общих приложений либоcookie в качестве схемы по умолчанию, либо путем явной настройки. Схема используется при шифровании и расшифровке файлов cookie, поэтому согласованная схема должна использоваться в приложениях.DataProtectionProvider
предоставляет службы защиты данных для шифрования и расшифровки полезных данных проверки подлинности cookie . Экземпляр DataProtectionProvider
изолирован от системы защиты данных, используемой другими частями приложения.
DataProtectionProvider.Create(System.IO.DirectoryInfo, ActionDataProtectionBuilder<>) принимает DirectoryInfo расположение хранилища ключей защиты данных.DataProtectionProvider
требуется пакет NuGet Microsoft.AspNetCore.DataProtection.Extensions : При использовании ASP.NET Core Identity:
SharedCookieApp
в следующих примерах). Дополнительные сведения см. в статье Настройка защиты данных в ASP.NET Core.Identity.Application
В Startup.ConfigureServices
:
services.AddDataProtection()
.PersistKeysToFileSystem("{PATH TO COMMON KEY RING FOLDER}")
.SetApplicationName("SharedCookieApp");
services.ConfigureApplicationCookie(options => {
options.Cookie.Name = ".AspNet.SharedCookie";
});
Примечание. Приведенные выше инструкции не работают с ITicketStore
(CookieAuthenticationOptions.SessionStore
). Дополнительные сведения см. здесь на GitHub.
По соображениям безопасности файлы cookie проверки подлинности не сжимаются в ASP.NET Core. При использовании файлов cookie проверки подлинности разработчики должны свести к минимуму количество сведений о утверждениях, включенных только в то, что необходимо для их потребностей.
При использовании файлов cookie непосредственно без ASP.NET Core Identityнастройте защиту данных и проверку подлинности.Startup.ConfigureServices
В следующем примере для типа проверки подлинности задано Identity.Application
значение :
services.AddDataProtection()
.PersistKeysToFileSystem("{PATH TO COMMON KEY RING FOLDER}")
.SetApplicationName("SharedCookieApp");
services.AddAuthentication("Identity.Application")
.AddCookie("Identity.Application", options =>
{
options.Cookie.Name = ".AspNet.SharedCookie";
});
По соображениям безопасности файлы cookie проверки подлинности не сжимаются в ASP.NET Core. При использовании файлов cookie проверки подлинности разработчики должны свести к минимуму количество сведений о утверждениях, включенных только в то, что необходимо для их потребностей.
Проверка подлинности cookie использует httpRequest.PathBase по умолчаниюCookie. Путь. Если приложение cookie должно быть общим для разных базовых путей, Path
необходимо переопределить:
services.AddDataProtection()
.PersistKeysToFileSystem("{PATH TO COMMON KEY RING FOLDER}")
.SetApplicationName("SharedCookieApp");
services.ConfigureApplicationCookie(options => {
options.Cookie.Name = ".AspNet.SharedCookie";
options.Cookie.Path = "/";
});
При размещении приложений, использующих файлы cookie в поддоменах, укажите общий домен в Cookieфайле . Свойство домена . Чтобы предоставить общий доступ к файлам cookie в таких приложениях contoso.com
, как first_subdomain.contoso.com
и second_subdomain.contoso.com
, укажите следующие Cookie.Domain
.contoso.com
значения:
options.Cookie.Domain = ".contoso.com";
Для рабочих развертываний настройте DataProtectionProvider
для шифрования неактивных ключей с помощью DPAPI или X509Certificate. Дополнительные сведения см. в статье Шифрование ключей в Windows и Azure с помощью ASP.NET Core. В следующем примере отпечаток ProtectKeysWithCertificateсертификата предоставляется в следующих случаях:
services.AddDataProtection()
.ProtectKeysWithCertificate("{CERTIFICATE THUMBPRINT}");
ASP.NET приложения 4.x, использующие ПО промежуточного слоя проверки подлинности Katana Cookie , можно настроить для создания файлов cookie проверки подлинности, совместимых с ПО промежуточного слоя проверки подлинности ASP.NET Core Cookie . Дополнительные сведения см. в разделе "Общие файлы cookie проверки подлинности" между ASP.NET 4.x и ASP.NET приложениями Core (dotnet/AspNetCore.Docs #21987).
Если приложения используют одну и ту же схему (ту же Identity версию Identity), убедитесь, что Identity система для каждого приложения указывает на одну и ту же пользовательская база данных. В противном случае система идентификации вызывает сбои во время выполнения при попытке сопоставить сведения в cookie проверки подлинности с информацией в своей базе данных.
Identity Если схема отличается от приложений, обычно так как приложения используют разные Identity версии, совместное использование общей базы данных на основе последней версии Identity невозможно без повторного сопоставления и добавления столбцов в схемы других приложенийIdentity. Часто более эффективно обновить другие приложения, чтобы использовать последнюю Identity версию, чтобы общая база данных была предоставлена приложениям.
Отзыв о ASP.NET Core
ASP.NET Core — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
События
Чемпионат мира Power BI DataViz
14 февр., 16 - 31 мар., 16
С 4 шансами войти, вы можете выиграть пакет конференции и сделать его в LIVE Grand Finale в Лас-Вегасе
ПодробнееОбучение
Модуль
Защита веб-приложения .NET с помощью платформы удостоверений ASP.NET Core - Training
Узнайте, как добавить проверку подлинности и авторизацию в веб-приложение .NET с помощью платформы ASP.NET Core Identity.
Сертификация
Microsoft Certified: Identity and Access Administrator Associate - Certifications
Продемонстрировать функции идентификатора Microsoft Entra для модернизации решений удостоверений, реализации гибридных решений и реализации управления удостоверениями.