Casper-SC
@Casper-SC
Программист (.NET)

Не работает аутентификация на основе Cookies (+JWT). Не сохраняются Cookies в браузере. Как исправить?

Основные вопросы в самом низу!

Ubuntu 18.04.3
ASP.NET Core 2.2
React JS
nginx version: nginx/1.14.0 (Ubuntu)

Сделал я аутентификацию на основе JWT по статьям, одну из которых можно увидеть по ссылке. Но в статье немного не тот исходный код, что у меня. У меня сделано один в один как по ссылке на гитхабе. Так вот. Если я дебажу это на своём компьютере, то всё работает нормально. Залил я веб-приложение на VPS воспользовавшись статьёй и ещё кучей статей оттуда же и гугла. Всё заработало.

Во-первых, мне почему-то приходит в ответе от сервера два вида куков (должно ли?) - это .AspNetCore.Identity.Application и .AspNetCore.Application.Id (это JWT):

Request headers
POST /api/auth HTTP/1.1
Content-Type: application/json
User-Agent: PostmanRuntime/7.20.1
Accept: */*
Cache-Control: no-cache
Postman-Token: 4455ffc3-78ba-40cc-bc3b-c49b13df121d
Host: my-site.ru
Accept-Encoding: gzip, deflate
Content-Length: 52
Connection: keep-alive


Request body
{
  "login": "admin",
  "password": "Qwerty123MegaPassword"
}


Response headers
HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Sat, 18 Jan 2020 13:51:23 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: no-cache
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: .AspNetCore.Identity.Application=CfDJ8FG6Anf1vpBAjf7Y4rsmh5YxW7NXd3ttKKmWqA45S-BxNm2Fh_C99pZggLK_fHoFqP0NrSN2cUiI0gKqQ4uYPO9Ec2vSyHo0sgx7TlOY3Q5vdIxESWOYQxL3m2u-xSbH3_ypfgYLh8YLOwiDdGHUDiubNjDVOmr2yKvEq5irAgt93zZMr04KJsdxc79W3MNeUXDcCXrYvxyW6Gkl0_7jJxJVRk84tz_7WxZa0n_T2tPrbElAJuS6tp5MrP4F-FB220sGcXrS55Bxihdmx7GTmP4i8j0UpjWcZPCk5cukh6yYa1cjd-qIJZEGqNsv2WejsRLV__INCtrHg7bilRZ_sjpTYRZK65tAoK16eJ0TvMaksWOfWl6H1lujOhbpS1slbrUsvtXZZAMY_AA040fDMkEQUJ4-88Wm1G6MhjyWGt3ZszKh7QStNtk03MKzQvcK9y1Y3-yDEtLIY5hHzJ-501laCaGgUN7OiCmWt1Sj4sS7q0bmzgnkdEmuxeBlctCtlktzMzr07dhQgW-nllV8QufZYw1C3GaK_9D9zwxYFic9IoR73krtE18EMiKdnHHCbMW4U1qDyj5VPga0L5xfqw0tFFpE_5Cq89KmC3_mcMu3seJmoCNzTL6a4gNMCjfotGpc1xpkgsFYiOgIqenR869IM3SteMO0ZTcfdpCrSJ_B; expires=Sat, 01 Feb 2020 13:51:23 GMT; path=/; secure; samesite=strict; httponly
Set-Cookie: .AspNetCore.Application.Id=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4xIiwic3ViIjoiYWRtaW4xIiwianRpIjoiMTBiMGJjYmEtMTA0MS00NjM2LTgyMDctMjYwOGMwOWIyMTdlIiwiaWF0Ijo0OTg4MzQ5MTMwMDEsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6IkFkbWluaXN0cmF0b3IiLCJuYmYiOjE1NzkzNTU0ODMsImV4cCI6MTU3OTM1OTA4MywiaXNzIjoiR29lc0NsaWVudCIsImF1ZCI6IkdPRVMifQ.oSru175eZ7o2UoGJOAhygoItDFwEsOimCYRCvTGgCJI; max-age=3600; path=/; secure; samesite=strict; httponly
X-Content-Type-Options: nosniff
X-Xss-Protection: 1
X-Frame-Options: DENY
Content-Encoding: gzip


Response body
{
  "minutes": 60,
  "serverTimeInfo": "UTC: 18.01.2020 13:51:23 +00:00; Local: 18.01.2020 16:51:23 +03:00"
}


На картинке видно, что куки истекли.
5e2312fbe6586745917684.png

А здесь видно, что они не были добавлены вообще в приложение. Непонятно, как это исправить?

5e230fa27606a781745492.png

Команды в Ubuntu выдают
root@vm-username-114825:~# ls -l /etc/localtime
lrwxrwxrwx 1 root root 33 Jan 18 16:01 /etc/localtime -> /usr/share/zoneinfo/Europe/Moscow


root@vm-username-114825:~# timedatectl
                      Local time: Sat 2020-01-18 17:02:56 MSK
                  Universal time: Sat 2020-01-18 14:02:56 UTC
                        RTC time: Sat 2020-01-18 14:02:57
                       Time zone: Europe/Moscow (MSK, +0300)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no


Nginx настройки для сайта (пока без HTTPS)
server {
	listen               80;
	listen               [::]:80;

	server_name          my-site.ru www.my-site.ru *.my-site.ru;

	location / {
		proxy_pass          http://localhost:5000;
		proxy_pass_header   Set-Cookie;
		proxy_http_version  1.1;
		proxy_set_header    Upgrade $http_upgrade;
		proxy_set_header    Connection keep-alive;
		proxy_set_header    Host $host;
		proxy_cache_bypass  $http_upgrade;
		proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header    X-Forwarded-Proto $scheme;
	}
}


1. Должно ли вообще приходить два вида куков, если делать JWT аутентификацию?
2. В чём может быть причина, что срок истечения куков примерно две недели назад?
3. Как исправить проблему?
  • Вопрос задан
  • 1819 просмотров
Решения вопроса 1
Casper-SC
@Casper-SC Автор вопроса
Программист (.NET)
Проблема была в том, что я развернул веб-приложение не настроив HTTPS, но с ним же всё дебажил. В куках был флаг secure, который отключается так:
app.UseCookiePolicy(new CookiePolicyOptions
{
    MinimumSameSitePolicy = SameSiteMode.Strict,
    HttpOnly = HttpOnlyPolicy.Always,
    // При включении HTTPS нужно вернуть CookieSecurePolicy.Always
    Secure = CookieSecurePolicy.None,
});


app.UseSecureJwt();
app.UseAuthentication();
// Не забыть вернуть в app.UseCookiePolicy параметр Secure = CookieSecurePolicy.Always,
//app.UseHttpsRedirection();
app.UseMvc();


Теперь как временное решение можно оставить HTTP, но в итоге нужно просто настроить HTTPS.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
yarosroman
@yarosroman
C# the best
Не понятно. Jwt используется для webapi, jwt и cookie не используют одновременно. Второе, Где то кривит время.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы