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