Эта кука шифруется с помощью DataPropction's master key.
вижу что мастер кей лежит в $HOME/.aspnet/DataProtection-Keys/key-рандомныйгуид.xml
проблема в том что приложение крутится на эфемерном диске в облаке и при каждом обновлении мастер кей ресетится на рендомный
А надо как то шарить этот мастер-кей
для простоты, каждый браузер помечается своим уникальным айдишником вот так:
async Task<string> GetBrowserAssignedId()
{
var user = User?.Identity?.Name;
if (!string.IsNullOrEmpty(user))
return user;
var newId = "Browser-" + Guid.NewGuid().ToString("N");
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, newId),
};
var claimsIdentity = new ClaimsIdentity(
claims,
CookieAuthenticationDefaults.AuthenticationScheme
);
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
new AuthenticationProperties
{
IsPersistent = true,
});
return newId;
}
В старпапе обычная аутентификация куками
public void ConfigureServices(IServiceCollection services)
{
services
.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromDays(10 * 365);
});
.....
Не пойму что гуглить.
После каждого "переноса" приложения на другой "диск" кука разумеется ресетится на новую.
Update:
В общем вспомнил я ответ — надо сконфигурировать shared data protection key storage:
https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-2.1
https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-2.1&tabs=aspnetcore2x
Единственное что непонятно как подсунуть ему свой готовый ключ?
Предположим облако гугловское а не ажур и windows-шаред диски держать только что бы ключи шарить не планируется