2014-12-05 2 views
1

Комментарий ниже an answer about state and REST недавно вызвал мой интерес. Для ясности я приведу комментарий полностью:Как аутентифицироваться без попадания в базу данных?

Ничто в моем ответе не подразумевает решение на основе доступа к базе данных по каждому запросу, если вы считаете, что это так, с вашей стороны невозможно понять аутентификацию и авторизацию в этом масштабе. Аутентификация может быть неявной в состоянии, вы думаете, что facebook выполняет «доступ к базе данных» по каждому запросу своего REST API? Или Google, если на то пошло? подсказка: нет

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

ответ

2

Один из способов - аутентификация на основе утверждений. Упрощенный и слегка осмысленный, он сводится к этому;

  • Вместо серверного приложения, аутентифицирующего самого пользователя, пользователь, не прошедший проверку подлинности, перенаправляется на отдельный сервер аутентификации.

  • Сервер аутентификации проверяет пользователя так, как он хочет (логин + пароль, сертификат, членство в домене и т. Д.) И создает подписанный «документ» с соответствующей информацией пользователя (идентификатор пользователя, имя, роли, .. .) Затем он перенаправляет пользователя обратно на серверное приложение с прилагаемым документом.

  • Приложение-сервер проверяет подпись документа, и, если он доверяет сигнатуре, он может использовать содержимое документа, чтобы предположить, кто из пользователей вместо доступа к базе данных.

  • Обычно серверное приложение кэширует документ в файле cookie/сеансе или аналогично, так что следующий доступ к приложению не должен отказываться от сервера аутентификации.

Таким образом, сервер приложения не должны касаться себя как пользователя аутентифицирован, доверяет только ли это решению сервера аутентификации. Если сервер аутентификации (и, возможно, клиент, если он не является браузером) добавляет поддержку входа в Facebook, серверное приложение автоматически «просто работает» с новым типом входа.

+0

Так что это не значит, что база данных не проверяется, просто проверка подлинности выполняется из другой базы данных? Насколько я понимаю ваш ответ, предоставленное пользователем значение по-прежнему проверяется на централизованно хранящееся в базе данных, но это делается на другом сервере, в основном для балансировки нагрузки. Это правильно? –

+0

@GarryCairns Разница заключается в том, что с базой данных с помощью _once_ при входе в систему запрашивается документ заявки, и после этого доступ к базе данных больше не нужен, чтобы знать требуемые данные пользователя, вместо этого документ претензии (или созданный из него сеанс) привык искать его. Если вы используете только один сервер, вы можете получить практически такой же эффект, читая данные пользователя один раз из базы данных при входе в систему и помещая результат в сеанс, чтобы вам не нужен доступ к базе данных для получения - например, имя пользователя. –

+0

хорошо, что имеет смысл. Благодарю. –

Смежные вопросы