Я создаю веб-сайт RESTful. После аутентификации пользователя и уполномоченным им предоставляется маркер доступа, который содержит:Где хранить токены доступа?
- user_id
- метка времени
- разрешения
Мой вопрос, если это лучше зашифровать эти маркеры с помощью симметричный алгоритм и передать его клиенту ИЛИ просто передать уникальный хеш, который указывает на сеанс пользователя в моем session table
. Итак, в основном:
Токен, хранящийся на стороне клиента - когда te сервер получает токен, он дешифруется и все данные хранятся в памяти.
Данные о сеансе хранятся в базе данных, а клиент получает хэш - когда сервер получает хэш, данные сеанса просматриваются в базе данных и берутся оттуда.
Какое решение лучше для большого сервиса, обслуживающего миллионы пользователей?
Если мы не храним какое-либо серверное состояние, у нас нет способа сделать недействительным JWT, когда пользователь выйдет из системы. По сути, у нашего сервиса нет функции выхода из системы, что может быть проблемой безопасности, особенно если мы установим время истечения слишком далеко в будущем. С другой стороны, если мы установим время истечения слишком быстро, у нас может возникнуть проблема с тем, что пользователи все еще находятся в системе, но не имеют действительного JWT. Это может привести к неудобной обработке ошибок и проблемам рабочего процесса пользователя. Есть ли способ решить эту проблему? Является ли метод api «refresh_token» хорошей идеей? –
Служба становится, по сути, без сеанса, поэтому концепция «входа в систему» или «выходила из системы» на самом деле не является правильным способом подумать об этом с точки зрения API - это о том, чтобы быть уверенным, что пользователь кто они такие. Как только вы сохраняете какое-то состояние сеанса, становится намного сложнее масштабировать, поскольку все это должно быть общим для всех серверов. Нет проблем с тем, чтобы метод API обновлял токен. –