Все это работает через 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')
.