RESTful веб-сервис Логины с PHP - PullRequest
2 голосов
/ 20 июля 2010

Я пытаюсь создать веб-сервис RESTful на PHP.

Согласно Рой Филдинг , связь между клиентом и сервером должна быть без сохранения состояния.

Значит, хранение информации о входе в систему, как в имени пользователя, вошедшего в систему в данный момент, в переменной PHP $ _SESSION - неправильный путь, поскольку это означает сохранение состояния сеанса? Это сделано для того, чтобы разрешить доступ к личным данным пользователя.

Используете ли cookie-файлы для отслеживания входов в систему согласно принципам REST? Или это не слишком важно?

Ответы [ 3 ]

8 голосов
/ 20 июля 2010

HTTP не имеет состояния, поэтому любое использование сеанса идет вразрез с дизайном HTTP (и большинство проблем с дизайном и безопасностью в Интернете сегодня проистекает из этого).

Для достижения подлинной аутентификации без сохранения состояния используйтеЗаголовки WWW-Authenticate и Authorization с вашим API, или обновите API для предоставления через HTTP + TLS (https), выдайте каждой учетной записи пользователя API сертификат X509, который идентифицирует их, а затем запросите его при каждом вызове API (вызатем можно идентифицировать их по открытому ключу, который вы сохраняете в учетной записи как ключ API).

ps: всегда стоит читать в контексте, глава 6 диссертации Роя неоценима, но часто игнорируетсядля этой единственной главы 5 REST.

может расширить ответ, если вам это необходимо:) расширение ..

Авторизация заголовок запроса и WWW-Authenticate заголовок ответа являются стандартными заголовками HTTP, используемыми для проверки подлинности ответа на вызов , двух комм.n и стандартизированные методы для использования с этими заголовками: Basic и Digest Authentication.Если учетные данные авторизации отправляются с запросом, который вы обрабатываете, чтобы разрешить доступ, в противном случае произошел сбой с соответствующим кодом состояния, или с помощью запроса с использованием заголовка ответа WWW-Authenticate, поток такой же, как аутентификация на основе формы, но он работает на RESTful HTTPвместо уровня, и следует использовать для проверки каждого запроса, а не для установки сеанса (, как большинство делают с аутентификацией на основе форм ).

HTTP + TLS /Метод x509 , на который я ссылаюсь, обычно известен как аутентификация с открытым ключом , опять же, он работает на уровне протокола, а не на уровне приложений и изначально поддерживается.Короче говоря, клиент имеет личный ключ + сертификат + открытый ключ на своей стороне, когда он подключается к вам, сертификат (который включает в себя открытый ключ) отправляется на сервер, вы затем читаете подробности из сертификата (если вы хотите) и использовать открытый ключ для их авторизации, если вы узнаете его, то впустите их. Это более безопасно, поскольку он использует стек HTTP + TLS, где все зашифровано и соединение между клиентом и сервером не имеет ничего промежуточного, и в первую очередьпотому что фактически «пароль» состоит из двух частей: закрытого ключа, который никогда не покидает свою машину, и открытого ключа, который вместе создает пару ключей.

В руководстве по PHP есть хороший разделдля HTTP-аутентификации с кодом (для метода заголовков) и все функции, необходимые для HTTP + TLS / x509 , также приведены в руководстве (примеры приведены в документации, но разбиты на различные функции).

0 голосов
/ 20 июля 2010

Если вы хотите быть хладнокровными в отношении аспекта без сохранения состояния, который может быть важен в некоторых системах, вы можете отправлять учетные данные пользователя при каждом запросе. Это позволяет вам разрешить доступ к определенным ресурсам и глаголам без создания «состояния». См., Например, документацию для сервиса Amazon S3 .

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

0 голосов
/ 20 июля 2010

Я бы определенно пошел с не слишком важным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...