Повторная аутентификация API и управление сеансом для Express.js

Я много раз изучал RESTful аутентификацию, и до сих пор не могу понять, как я могу проектировать свою веб-архитектуру. У меня есть много вопросов без ответа.

Я хочу, чтобы мой API обслуживался и для мобильных устройств, и для Интернета, и я использую Express v4.

Я не хочу использовать базовую аутентификацию, как многие посты предлагают в качестве простого выхода, или я могу использовать промежуточное ПО Passport, но я хочу использовать аутентификацию на основе токенов или что-то подобное или лучше, и я хочу сделать свою аутентификацию чтобы я мог лучше понять, но я не уверен, как мне этого добиться.

Ниже я упросту предполагаемую архитектуру аутентификации:

Регистрация нового пользователя

  • Клиентская сторона

Отправить имя пользователя и пароль на сервер (Я знаю, что если вы хотите сделать защищенное соединение, это использовать соединение https, или я предоставлю свои учетные данные, или у вас есть какие-либо другие параметры, кроме https? Или мне нужно будет использовать открытый и закрытый ключи с меткой времени и хэшем мои учетные данные перед отправкой на сервер? Как я могу это сделать? Есть ли другой лучший вариант?

  • Серверная сторона

Хешировал пароль с использованием соляной криптографии и сохранял хешированный пароль и соль, затем генерировал идентификатор токена и отправлял клиенту, а идентификатор токена сохранялся в сеансах или с использованием базы данных REDIS?

Разве это не использует сессии снова нарушает REST? Но если я не использую сеансы, как я могу сохранить идентификатор токена и сравнить его со стороной клиента?

  • Клиентская сторона

Так как теперь у меня есть идентификатор токена, как я могу хранить его на стороне клиента?

  1. Должен ли я использовать cookie? Если да, будет ли это нарушать RESTful? И как моё мобильное приложение может хранить куки?
  2. Какие еще варианты я могу иметь кроме cookie? Я не могу думать ни о чем.

API авторизации

  • Клиентская сторона

Теперь у меня есть идентификатор токена, и я буду помещать его в заголовок авторизации каждый раз, когда я хочу отправить запрос на сервер.

  • Серверная сторона

Когда запрос получен, сервер проверит API токена и сравнит его с токеном сеанса, если он верен, запрос разрешить, иначе отклонить

Это стандартный способ авторизации приложений Express?

Прошу прощения за длинный пост, но я чувствую, что действительно должен освоить аутентификацию и авторизацию, потому что это важно. Я действительно надеюсь, что кто-то может исправить мое неправильное представление об аутентификации REST и ответить на мои вопросы или предложить мне лучший способ сделать это.

Ответ 1

  • Отправить учетные данные пользователя, закодированные через https
  • Чтобы сравнить токен на стороне клиента, вы можете сохранить его на карте или в магазине Redis, соответствующем идентификатору пользователя, и сопоставить его с тем, чтобы считать пользователя аутентифицированным. Он не убивает значение Rest как в Rest, а токены авторизации - это сеансы, которые только после истечения срока действия
  • Экспресс не имеет какого-либо конкретного или стандартного метода авторизации, он позволяет вам использовать любые бэкэнды для выполнения проверки подлинности и авторизации в соответствии с требованиями вашего приложения.