Как пользователь будет оставаться на веб-сайте REST? - PullRequest
7 голосов
/ 23 декабря 2010

Год или около того назад я задал этот вопрос: Можете ли вы помочь мне понять это?«Распространенные ошибки REST: сессии не имеют значения» .По сути, мой вопрос был таким:

Хорошо, я получаю, что HTTP-аутентификация выполняется автоматически для каждого сообщения - но как?Имя пользователя / пароль отправляется с каждым запросом?Разве это не увеличивает площадь поверхности атаки?Я чувствую, что мне не хватает части головоломки.

Ответы, которые я получил, имели смысл в контексте мобильного приложения (iPhone, Android, WP7) - при разговоре со службой REST,приложение будет просто отправлять учетные данные пользователя вместе с каждым запросом.Это прекрасно сработало для меня.

Но теперь я хотел бы лучше понять, как можно защитить REST-подобный веб-сайт, например, сам StackOverflow или что-то вроде Reddit.Как все будет работать, если пользователь вошел в систему через веб-браузер, а не через приложение для iPhone?

  • Что происходит, когда пользователь входит в систему?Сохраняются ли учетные данные в браузере каким-либо образом?
  • Как браузер узнает, какие учетные данные отправлять с последующими запросами REST?
  • Что если это вызов JavaScript для веб-службы?Как вызов JavaScript включает учетные данные пользователя?

Я буду весьма откровенен: мое понимание безопасности, когда дело доходит до веб-сайтов, довольно ограничено, я не веб-разработчик (Черт, Джим, яя разработчик рабочего стола!).Мне нравилось работать со службами REST с точки зрения приложений, но теперь я хочу попробовать создать сайт, основанный на принципах REST, и я чувствую себя довольно растерянным.

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

Ответы [ 3 ]

6 голосов
/ 23 декабря 2010

Если вы используете прокси-сервер, такой как Fiddler, вы можете точно увидеть, что делает stackoverflow.

Он подключается к ресурсу / users / authenticate /? S = ...., который отвечает двумя командами «Set-Cookie» в заголовке (gauth и usr).

Эти файлы cookie передаются в заголовках последующих запросов в stackoverflow.

Я предполагаю, что stackoverflow просматривает ключи от этих куки, чтобы убедиться, что вы ранее авторизованы. Когда срок действия файла cookie истекает, считается, что он вышел из системы.

2 голосов
/ 24 декабря 2010

Настоящая проблема в том, что веб-браузеры отстой. Хорошо, так что, может быть, я просто горький; -).

Если вы создаете веб-сайт, который использует один из стандартных механизмов HTTP-аутентификации, например, Basic или Digest, браузер откроет экран входа в систему и затем использует эти учетные данные при каждом последующем запросе.

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

Было бы также неплохо, если бы был способ сообщить браузеру, эй, те учетные данные, которые вы используете, пожалуйста, забудьте их. Это позволит вам эффективно выйти из системы.

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

2 голосов
/ 23 декабря 2010

После аутентификации пользователь обычно получает «cookie» (содержащий уникальный идентификатор сеанса), который отправляется обратно от клиента на сервер при каждом последующем запросе.*

...