У нас есть приложение WebForms, созданное для ASP. Net Framework (4.7.2), которое использует OWIN cook ie аутентификацию. В рамках перехода к. Net Core мы хотели бы использовать файлы cookie в приложении API. Net Core (2.1).
Приложение WebForms работает в Azure и использует DataProtectionStartup
подключить к IServiceCollection
файлу машинного ключа для использования метода PersistKeysToAzureBlobStorage
в Microsoft.AspNetCore.DataProtection
согласно документации Microsoft.
WebForms DataProtectionStartup
services.AddDataProtection()
.PersistKeysToAzureBlobStorage(blockblob)
.SetApplicationName("OurAppName");
. Net Базовый API Startup
services.AddDataProtection()
.PersistKeysToAzureBlobStorage(blockblob)
.SetApplicationName("OurAppName");
Оба приложения успешно работают с машинным ключом, сгенерированным и сохраненным в хранилище больших двоичных объектов.
У Microsoft есть документация , в которой подробно описывается, как поделиться OWIN cook ie с общим файлом ключей машины, используя DataProtectorShim
из Microsoft.Owin.Security.Interop
. Для DataProtectionShim
требуется DataProtectionProvider
, сгенерированный из общего машинного ключа, в документации на него ссылаются в обоих приложениях для создания cook ie и использует метод DataProtectionProvider.Create()
, который принимает местоположение файла в качестве аргумента.
Поскольку мы используем DataProtection
с хранилищем BLOB-объектов, у нас нет этого местоположения. Мы попытались использовать DataProtectionProvider.Create()
только с именем приложения в обоих приложениях, так как оно будет использовать файл ключа хранилища больших двоичных объектов. К сожалению, это не создает Cook ie, который работает в обоих приложениях.
OWIN cook ie Настройки аутентификации в OwinStartup
:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = 'Identity.Application',
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
LoginPath = new PathString("/login.aspx"),
CookieName = "AppCookieName",
ExpireTimeSpan = 300,
SlidingExpiration = true,
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity =
SecurityStampValidator
.OnValidateIdentity<UserManager, User, int>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentityCallback: (manager, user) =>
manager.CreateIdentityAsync(user, 'Identity.Application'),
getUserIdCallback: (user) => user.GetUserId<int>())
},
TicketDataFormat = new AspNetTicketDataFormat(
new DataProtectorShim(
DataProtectionProvider.Create("OurAppName")
.CreateProtector(
"Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware",
'Identity.Application',
"v2")
)),
CookieManager = new ChunkingCookieManager()
});
И нашем. Net Core Startup
настройка для файлов cookie:
services.AddAuthentication("Identity.Application")
.AddCookie("Identity.Application", options =>
{
options.Cookie.Name = "AppCookieName";
});
Кто-нибудь сталкивался с этим сценарием ранее, во всех примерах мы нашли только примеры использования DataProtectionProvider.Create()
, используемого с расположением файла машинного ключа, и не нашли руководства как это сделать с помощью метода PersistKeysToAzureBlobStorage
.