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