Для веб-службы RESTful мы говорим, что сервер не должен хранить никакого состояния. Теперь для каждого запроса «пользователь» должен проходить проверку подлинности и иметь разрешение на действие, которое он / она желает выполнить.
Теперь каждый запрос будет содержать данные авторизации для этого пользователя. Вот мои заблуждения:
Предполагается, что на главной странице есть поле логина и пароля. Пользователь вводит имя пользователя / пароль, который отправляется обратно на сервер, проверяется пользователем, а затем возвращается «некоторый токен». Теперь этот токен отправляется на сервер при каждом запросе. Вопрос (ы):
- Нужно ли внутренней базе данных иметь отдельную таблицу для хранения этих
токены проиндексированы по имени пользователя?
- Если токен хранится в БД, то каждый запрос должен вызывать БД. Разве это не делает сервер БД узким местом во время высокой нагрузки?
- Если токен на самом деле не хранится в БД, что является лучшим «спокойным» местом для его хранения?
- Сеансы, вероятно, НЕ успокаивают, но тогда я не вижу, как растут успокоительные аутентификация / авторизация (w.r.t. вышеупомянутые пункты)?
- Если это НЕ токен, тогда нужно ли отправлять имя пользователя / пароль назад-вперед? (звучит как плохая идея:)
Возможно, я неправильно понимаю концепцию RESTful аутентификации / авторизации. Но действительно ли это так, что для каждого http-запроса «сервис» должен совершить поездку в БД для проверки учетных данных? Есть ли что-то, что может ускорить процесс и при этом придерживаться принципов отдыха? Я мог бы подумать о наличии кеша, в котором хранятся детали, и в случае перезапуска сервера он просто совершает поездку в БД. Это всего лишь выигрыш в производительности, который может усложнить систему (возможно, того стоит, не знаю). Это единственное решение?
Итак, с теоретической / концептуальной точки зрения REST (необязательная реализация), как решается эта проблема (если она вообще существует)? Как вы в своем профессиональном опыте справились с этой проблемой и насколько уместным был подход?
Мы работаем над веб-сервисом Restlet + J2EE + MySQL Restful, и у меня всплыл этот вопрос, но нет удовлетворительных ответов (Google, Stackoverflow и т. Д.). Мне известны базовая и дайджест-авторизация HTTP, но я не знаком с внутренностями хранения / извлечения согласно приведенному выше объяснению.