Повторная аутентификация API и управление сеансом для Express.js
Я много раз изучал RESTful аутентификацию, и до сих пор не могу понять, как я могу проектировать свою веб-архитектуру. У меня есть много вопросов без ответа.
Я хочу, чтобы мой API обслуживался и для мобильных устройств, и для Интернета, и я использую Express v4.
Я не хочу использовать базовую аутентификацию, как многие посты предлагают в качестве простого выхода, или я могу использовать промежуточное ПО Passport, но я хочу использовать аутентификацию на основе токенов или что-то подобное или лучше, и я хочу сделать свою аутентификацию чтобы я мог лучше понять, но я не уверен, как мне этого добиться.
Ниже я упросту предполагаемую архитектуру аутентификации:
Регистрация нового пользователя
Отправить имя пользователя и пароль на сервер
(Я знаю, что если вы хотите сделать защищенное соединение, это использовать соединение https, или я предоставлю свои учетные данные, или у вас есть какие-либо другие параметры, кроме https? Или мне нужно будет использовать открытый и закрытый ключи с меткой времени и хэшем мои учетные данные перед отправкой на сервер? Как я могу это сделать? Есть ли другой лучший вариант?
Хешировал пароль с использованием соляной криптографии и сохранял хешированный пароль и соль, затем генерировал идентификатор токена и отправлял клиенту, а идентификатор токена сохранялся в сеансах или с использованием базы данных REDIS?
Разве это не использует сессии снова нарушает REST? Но если я не использую сеансы, как я могу сохранить идентификатор токена и сравнить его со стороной клиента?
Так как теперь у меня есть идентификатор токена, как я могу хранить его на стороне клиента?
- Должен ли я использовать cookie? Если да, будет ли это нарушать RESTful? И как моё мобильное приложение может хранить куки?
- Какие еще варианты я могу иметь кроме cookie? Я не могу думать ни о чем.
API авторизации
Теперь у меня есть идентификатор токена, и я буду помещать его в заголовок авторизации каждый раз, когда я хочу отправить запрос на сервер.
Когда запрос получен, сервер проверит API токена и сравнит его с токеном сеанса, если он верен, запрос разрешить, иначе отклонить
Это стандартный способ авторизации приложений Express?
Прошу прощения за длинный пост, но я чувствую, что действительно должен освоить аутентификацию и авторизацию, потому что это важно. Я действительно надеюсь, что кто-то может исправить мое неправильное представление об аутентификации REST и ответить на мои вопросы или предложить мне лучший способ сделать это.
Ответы
Ответ 1
- Отправить учетные данные пользователя, закодированные через https
- Чтобы сравнить токен на стороне клиента, вы можете сохранить его на карте или в магазине Redis, соответствующем идентификатору пользователя, и сопоставить его с тем, чтобы считать пользователя аутентифицированным. Он не убивает значение Rest как в Rest, а токены авторизации - это сеансы, которые только после истечения срока действия
- Экспресс не имеет какого-либо конкретного или стандартного метода авторизации, он позволяет вам использовать любые бэкэнды для выполнения проверки подлинности и авторизации в соответствии с требованиями вашего приложения.