.NET Core 2.2 Shared Cookie вызывает ошибку Bad Request при входе в систему - PullRequest
1 голос
/ 24 сентября 2019

У меня есть 2 приложения, которые делят куки между ними.Это конфигурация в файле startup.cs:

services.ConfigureApplicationCookie(options =>
{
    // Cookie settings
    options.Cookie.Name = Environment.GetEnvironmentVariable(CONST.CookieName);
    options.Cookie.SameSite = SameSiteMode.Lax;
    options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
    options.Cookie.Path = Environment.GetEnvironmentVariable(CONST.CookiePath);
    options.Cookie.Domain = Environment.GetEnvironmentVariable(CONST.CookieDomain);
    options.Cookie.HttpOnly = true;
    options.ExpireTimeSpan = TimeSpan.FromMinutes(Convert.ToDouble(Environment.GetEnvironmentVariable(CONST.CookieExpiryTimeSpanInMinutes)));

    options.LoginPath = Environment.GetEnvironmentVariable(CONST.LoginPath);
    options.AccessDeniedPath = Environment.GetEnvironmentVariable(CONST.AccessDeniedPath);
    options.SlidingExpiration = true;
});

Проблема теперь в том, что если я загружаю приложение A и приложение B вместе, войдите в приложение A, а затем нажмите «Войти в приложение B», я получу BadОшибка запроса.Я попытался отладить приложение B, чтобы проверить, почему оно получало эту ошибку, и обнаружил, что когда я вошел в приложение A и попытался войти в приложение B, приложение не знает, что я уже прошел проверку подлинности.

if (User.Identity.IsAuthenticated)
{
    return LocalRedirect(returnUrl);
}

Строка выше всегда ложна.

Есть ли способ предотвратить эту проблему?Или есть способ проверить, был ли уже установлен файл cookie?

РЕДАКТИРОВАТЬ:

Я установил ключ защиты данных для всех приложений:

var ds = new DirectoryInfo("PathTOKey");
services.AddDataProtection()
    .PersistKeysToFileSystem(ds)
    .SetApplicationName("DPName");

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Убедитесь, что вы настроили защиту данных как в приложении, так и в ключах защиты данных, а имя приложения должно совпадать в двух приложениях.

Конфигурирует систему защиты данных для сохранения ключей в указанном каталоге.Этот путь может находиться на локальном компьютере или может указывать на общий ресурс UNC.

services.AddDataProtection()
         .PersistKeysToFileSystem(new DirectoryInfo(@"d:\Keys"))
         .SetApplicationName("SharedCookieApp");

services.ConfigureApplicationCookie(options => {
          options.Cookie.Name = ".AspNet.SharedCookie";
        });

Вы можете проверить значение файлов cookie по имени файла cookie в запросе

var cookie=Request.Cookies["Cookie Name"];

Ссылка: https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-3.0

0 голосов
/ 24 сентября 2019

Недостаточно поделиться cookie.Файл cookie зашифрован, поэтому оба приложения должны быть настроены на одинаковое шифрование / дешифрование.Это делается с помощью поставщиков защиты данных и требует сохранения набора ключей в общем месте, к которому могут обращаться оба приложения, и обеспечения того, чтобы оба использовали одно и то же имя приложения (которое контролирует разделение ключей).

services.AddDataProtection()
    .PersistKeysToFileSystem("{PATH TO COMMON KEY RING FOLDER}")
    .SetApplicationName("SharedCookieApp");

Этовсе в документах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...