Задать вопрос

Безопасная аутентификая пользователей без сессий?

Здравствуйте.
Интересует, есть ли безопасный вариант аутентификации пользователей без сессий?
Нагуглил, что есть jwt. Но при краже токена злоумышленник может пользоваться учётной записью в пределах срока жизни access token.
Есть что-то безопаснее?
  • Вопрос задан
  • 434 просмотра
Подписаться 3 Простой 8 комментариев
Пригласить эксперта
Ответы на вопрос 4
FanatPHP
@FanatPHP
Чебуратор тега РНР
На вопрос, взятый с потолка, редко можно плучить осмысленный ответ.
Спрашивая, "есть ли что-то безопаснее" необходимо сформулировать критерии безопасности.
Спрашивая, как сделать идентификацию пользователей "без сессий", необходимо пояснять, почему именно без сессий.
Ответ написан
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
Ну вот как раз таки JWT у вас угонят и вы не узнаете, а сессию вполне себе можно привязать к юзерагенту/ip/чему угодно на серверной стороне. Хотя и в JWT можно это вписать, но проще уж с сессиями тогда.

А так кроме сессий никаких авторизаций больше и нет как класс. В любом случае что-то в браузере хранится что сервер может распознать, и это есть "сессия".
Ответ написан
megafax
@megafax
web-программист
https://gist.github.com/zmts/802dc9c3510d79fd40f9d...
умейте пользоваться поиском тут
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Токен привязывется к браузеру.
Как именно?
1. При аутентификации, отпечаток клиента (fingerprint) шифруется парольным хешем пользователя (на стороне клиента!) и сверху, "оборачивается": шифруется публичным ключом сервера, и затем, пересылается серверу.
2. Сервер открывает своим приватным ключом пакет, расшифроввывает с помощью своего парольного хеша (для этого конкретного юзера, из БД), и получает данные fingerprint.
3. Сервер привязывает данные fingerprint к токену и отправляет токен и функцию хеширования fingerprint'а клиенту.
4. При каждом запросе, клиент отправляет свой токен и подписываем запрос хешем fingerprint'а.
5. Сервер сверяет токен и подпись запроса (хешем fingerprint'а).
6. При их несовпадении - токен становится невалидным (сессия завершается).

Чтобы сохранить хеш fingerprint'а ещё более надёжно, его можно привязать к IP-адресу.
При смене IP - произойдёт "прозрачная" переинициализация сессии (и с запросом реального fingerprint'а клиента), незаметная для конечного пользователя (если у него валидный токен для вновь определённого fingerprint'а).

При краже кук или перехватие трафика - злоумышленник не знает реального fingerprint.
А без него - он не сможет подделать подпись, чтобы воспользоваться текущим токеном.
Ответ написан
Ваш ответ на вопрос

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

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