Я использую механизм пользовательской авторизации, где я сохраняю текущий сеанс пользователя в файле cookie.Каждый раз, когда кто-то посещает веб-сайт, ActionFilter указывает, где он выполняет какие-либо действия для проверки значения cookie и состояния сеанса.
Проблема, с которой я столкнулся, - я должен POST
некоторые данные на другом веб-сайте (https://differentUrl.com), где я передаю свои веб-сайты returnUrl (https://mywebsiteUrl.com). Другой веб-сайт после завершения работы отправляет обратно POST
ответ на мой returnURL. После этого файл cookie, который я пробуючтобы получить, всегда null
.
Создание куки, как это (это происходит при входе в систему):
private readonly IHttpContextAccessor _contextAccessor; //Injected via DI
...
var cookieOptions = new CookieOptions()
{
Expires = DateTime.Now.AddDays(10),
Secure = true,
HttpOnly = false,
SameSite = SameSiteMode.None //Still sets as Lax in browser
};
this._contextAccessor.HttpContext.Response.Cookies.Append("SomeKey", "myEncryptedCookieValue", cookieOptions);
Получение куки после перенаправления:
var cookieDataString = this._contextAccessor.HttpContext.Request.Cookies["SomeKey"];
cookieDataString
всегда null
.
Он отлично работает, когда я нахожусь на том же сайте, но когда меня перенаправляют обратно с другого сайта, всегда null
Обновление 1:
После некоторых исследований я обнаружил, что эта проблема может привести к политике SameSite
. Найдена эта статья Использование того же атрибута cookie сайта , который говорит, что lax
это не то, что вы хотитеиспользуйте, когда вы получите POST
метод на ваш сайт.Создание cookie Я установил параметры cookie как SameSiteMode.None
.Поскольку это не сработало, я обнаружил, что вы должны установить MinimumSameSitePolicy
в промежуточном программном обеспечении для запуска.
app.UseCookiePolicy(
new CookiePolicyOptions()
{
MinimumSameSitePolicy = SameSiteMode.None
});
После удаления старого куки и создания нового он все равно создает его с политикой lax
.