Сессионный ключ может быть хорошей альтернативой. Вместо того, чтобы обмениваться парой имя пользователя / пароль, вы можете вместо этого создать сервер для создания сеанса Cook ie, который будет использоваться для аутентификации.
Я не эксперт в этом, но вот один из способов Я бы сделал это, если бы мне пришлось:
Клиент должен сгенерировать два ключа: публичный c и закрытый ключ. Сохраните эти ключи в sessionStorage
(не localStorage).
Когда клиент пытается «пройти аутентификацию» с помощью имени пользователя / пароля, имя пользователя, пароль и секретный ключ должны быть зашифрованы с помощью открытого ключа сервера c сервера и отправлены на сервер.
Ключ сервера publi c может храниться в localStorage
. Найдите способ передать этот ключ клиенту. Может быть, конечная точка, такая как /pub-token
?
Сервер расшифрует это имя пользователя / пароль и после проверки пары сохранит секретный ключ клиента и сгенерирует сеанс приготовления ie, который отправляется обратно клиенту.
Теперь в последующих запросах клиент зашифровывает любое сообщение, отправляемое на сервер, с помощью ключа publi c и сеанса cook ie будет сопровождать эти запросы.
Сервер будет проверять сессионный повар ie и расшифровывать сообщения, отправленные клиентом, используя секретный ключ клиента.
На стороне сервера вы можете используйте быстрое хранилище значений ключей, такое как redis или memcached, для сопоставления сеансового ключа с секретным ключом клиента.
Когда сервер определяет, что сеанс "закончен", он удаляет сеанс cook ie и клиенту нужно будет снова сгенерировать новую пару ключей (или продолжать использовать ту же самую ...).
Я не уверен, соответствует ли этот поток понятию "ключ сеанса", но я нахожу это более безопасно, чем просто сгенерировать ключ на сервере и использовать только этот ключ в качестве аутентификации.