Можно ли использовать httpOnly для JWT?

Я не понимаю - почему я нигде не могу найти ни одного примера с jwt внутри httpOnly? Вот у меня есть сервис, в котором по сути нет нужды в сессии и тд. Все что нужно это просто авторизовать человека и выкинуть его если прошло 3 дня. Мне очень нравится метод при котором, я просто проверяю что аутентификация прошла, запихиваю сгенерированный jwt в куки с флагом httpOnly, а потом просто на сервере читаю его из куков в каждом запросе. В этом случае, все что нужно сделать клиенту - это следить за 401 если она брошена и разлогинить в случае если поймали 401. Сам JWT передается туда-сюда при каждом запросе и с клиента его не достать. Безопасно, быстро, легко.

Но вот что меня смущает - я нигде и ни разу не видел такой реализации. И поиск информации по этому методу ответа не дал. ИИ так же ничего толкового сказать не может.

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

Кто нибудь может обьяснить мне нормально ли использовать такую стратегию авторизации?


Ответы (2 шт):

Автор решения: Solt

jwt подделать практически невозможно, если скрывать в трафике нечего - почему бы и нет.

→ Ссылка
Автор решения: Pak Uula

О, это старый добрый холивар! Ему уже лет десять: http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/

Если кратко суммировать статью:

  1. Если сессию хранить только в токене на стороне клиента, то нельзя разлогинить пользователя на стороне сервера. Для разлогина нужно хранить идентификатор сессии в сервере, но... если вы уже храните идентификатор сессии, то зачем вам JWT? Храните этот идентификатор в куках

  2. Размер. Десять лет назад браузеры ограничивали размер хранилища под куки для отдельного сайта. Размер JWT начинается от сотни байтов. Мол, так и сяк, с JWT место для кукесов кончится. Но насколько понимаю, в нынешние времена это уже не так - есть лимиты на размер одной куки (4096), но в целом браузеры дозволяют хранить сколько угодно куков для каждого сайта. Проверить браузер можно, например, здесь: http://browsercookielimits.iain.guru/

  3. И вообще, JWT был придуман для другого: короткоживущие, криптографически подтверждённые одноразовые claims. А аутентификация - это многоразовый, долгоживущий идентификатор. След-но, JWT не должон для такого использоваться.

Я лично согласен с тезисом 1 и не согласен с тезисами 2 и 3.

Исходя из 1, никогда не использовал JWT для аутентификации в кукесах.

→ Ссылка