Меня особенно интересует, как пользователи выполняют авторизованные / аутентифицированные операции в веб-API.
Совместимы ли куки-файлы аутентификации с философией REST и почему?
Меня особенно интересует, как пользователи выполняют авторизованные / аутентифицированные операции в веб-API.
Совместимы ли куки-файлы аутентификации с философией REST и почему?
Ответы:
Идеальный сервис ReSTful позволяет клиентам (которых может не быть в браузере) для выполнения любой необходимой задачи в одном запросе ; потому что полное состояние, необходимое для этого, удерживается клиентом, а не сервером. Так как клиент имеет полный контроль над состоянием, он может создавать состояние самостоятельно (если это законно) и общаться только с API, чтобы «выполнить».
Требование куки может сделать это трудным. Для клиентов, помимо браузеров, управление файлами cookie является довольно большим неудобством по сравнению с параметрами запроса, простыми заголовками запроса или телом запроса. С другой стороны, в браузере использование файлов cookie может значительно упростить многие вещи.
Таким образом, API может сначала искать в Authorization
заголовке нужные ему данные аутентификации, поскольку это, вероятно, место, где клиенты, не являющиеся браузерами, предпочтут его размещать, но для упрощения и оптимизации клиентов на основе браузера он также может проверять наличие файла cookie сеанса. для входа на стороне сервера, но только в случае отсутствия обычного Authorization
заголовка.
Другим примером может быть сложный запрос, который обычно требует много установленных параметров. У неинтерактивного клиента не возникнет проблем с объединением всех этих данных в один запрос, но интерфейс на основе форм HTML может предпочесть разбить запрос на несколько страниц (что-то вроде набора страниц «мастера»), чтобы пользователи не отображались с параметрами, которые не применимы на основе предыдущих выборов. Все промежуточные страницы могут хранить значения в файлах cookie на стороне клиента, так что только самая последняя страница, на которую пользователь фактически отправляет запрос, вообще имеет какой-либо побочный эффект на сервере. API может искать необходимые атрибуты в теле запроса и возвращаться к просмотру файлов cookie, если необходимые параметры отсутствуют.
Изменить: в RE к @ Конраду комментарий ниже:
Токены для сравнения сложнее реализовать, особенно потому, что вы не можете легко аннулировать токен, не сохранив их где-либо.
э-э ... вы проверяете куки на стороне сервера, верно? То, что вы сказали браузеру отказаться от cookie-файла через 24 часа, еще не значит, что оно будет. Этот файл cookie может быть сохранен высокотехнологичным пользователем и может использоваться повторно после истечения срока его действия.
Если вы не хотите хранить данные сеанса на стороне сервера, вы должны сохранить их в токене (cookie или иначе). Автономный токен аутентификации иногда называют Macaroon. То, как это передается между клиентом и сервером (с помощью cookie, в виде дополнительных заголовков или в самом объекте запроса), полностью не зависит от самого механизма аутентификации.
HttpClient
в .NET вы можете использовать файлы cookie без каких-либо проблем, и вам не нужно об этом думать. Токены для сравнения сложнее реализовать, особенно потому, что вы не можете легко аннулировать токен, не сохранив их где-либо.
curl
или wget
, управление куки чертовски неудобно , и вы действительно должны думать о них кучу. Я ответил на ваш другой вопрос, отредактировав свой ответ.
Да и Нет - Зависит от того, как вы используете это.
Файлы cookie, если они используются для поддержания состояния клиента на клиенте, для клиента, клиента и клиента, тогда они являются спокойными.
Если вы сохраняете состояние сервера в файле cookie, тогда вы в основном просто переносите нагрузку на клиента - что не мешает работе.
Итак, каковы некоторые примеры?
Restful:
Не успокаивается:
Спокойствие приходит от безгражданства - сервера. Клиенты могут поддерживать состояние приложения и отправлять его на сервер, чтобы сообщить, где они находятся, чтобы сервер мог решить, куда ему идти. В основном сеансы / состояния нуждаются в исторических данных и зависят, так сказать, от прошлых запросов, в идеале релаксирующие приложения в идеале не нужны (если у вас будет экран входа в систему, иметь полноценное релакс-приложение 100%) :)
Можно использовать куки. Отдых позволяет им.
REST требует, чтобы любая информация о сеансе хранилась на стороне клиента, но когда дело доходит до аутентификации, некоторая информация должна оставаться на стороне сервера по соображениям безопасности.
Из одного из моих сообщений в блоге есть общее согласие, что данные аутентификации считаются вне области, касающейся REST. Следовательно, для серверов нормально держать некоторые данные этого сеанса на своей стороне.