Как мне обработать авторизацию для API, написанного на PHP - PullRequest
0 голосов
/ 20 октября 2011

Итак, у меня есть идея очень простого сервиса, который будет предоставлять API, и я знаю, как писать API REST-ish на PHP, но все, что я когда-либо делал, было свободно доступно.Для этого я хотел бы предоставить доступ либо через пару ключ / секрет, либо через базовую авторизацию http.

Понятия не имею, как это сделать.

1 Ответ

7 голосов
/ 20 октября 2011

Все это работает через HTTP-заголовки в той или иной форме. Обычная процедура входа в систему обычно использует куки-файлы, поэтому отправляется заголовок запроса Cookie: FOO=owiegwoeugiaweg, который получает сервер. Вы можете сделать то же самое для API, но обычно это не лучшая вещь.

Лучше - это некоторая форма авторизации с использованием определенных полей заголовка, таких как заголовок Authorization:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Этот заголовок может содержать все, что вы хотите. Вы можете использовать некоторый пользовательский хеширование паролей / обмен ключами / любой другой алгоритм и потребовать от клиента отправить эту информацию в заголовок Authorization. Вы также можете придумать любой собственный заголовок, если хотите.

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

headers:
    Date: Thu, 20 Oct 2011 04:00:48 GMT
    Authorization: MySchema user123:oiquwetfp32900fjp0q93t1039

where:
    Date          = timestamp, must be within 15 mins of server time
    Authorization = MySchema USERNAME:SIGNATURE
    SIGNATURE     = sha1( Date + REQUEST BODY + PASSKEY )

Таким образом, вы, по сути, отправляете пароль пользователя с каждым запросом, но шифруете таким образом, который необратим, уникален для каждого запроса, но подтверждается сервером, повторяя те же операции (проверка на правильную метку времени, хэши Заголовок даты + тело запроса + пароль пользователя). Раньше была хорошая документация, подробно объясняющая этот процесс для Amazon Web Services, но я не могу сейчас найти ее. Попробуйте исследовать «подписание запроса» для получения дополнительной информации.

На стороне сервера вы можете найти эти HTTP-заголовки в массиве $_SERVER. Необработанное тело запроса вы можете получить через file_get_contents('php://input').

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