Вы должны посмотреть на подписание запроса.Отличным примером является API SEST REST Amazon .
Обзор на самом деле довольно прост.У пользователя есть две важные части информации для использования вашего API, открытый идентификатор пользователя и закрытый ключ API.Они отправляют открытый идентификатор вместе с запросом и используют закрытый ключ для подписания запроса.Принимающий сервер ищет ключ пользователя и решает, является ли подписанный запрос действительным.Процесс выглядит примерно так:
- Пользователь присоединяется к вашему сервису и получает идентификатор пользователя (например, 123) и ключ API.
- Пользователь хочет сделать запрос к вашему сервису APIчтобы обновить свой адрес электронной почты, чтобы ему нужно было отправить запрос в ваш API, возможно, на
/user/update?email=new@example.com
. - Чтобы сделать возможным подтверждение запроса, пользователь добавляет идентификатор пользователя и подпись для вызова, поэтому вызов становится
/user/update?email=new@example.com&userid=123&sig=some_generated_string
- Сервер принимает вызов, видит, что он от userid = 123, и ищет ключ API для этого пользователя.Затем он повторяет шаги для создания подписи из данных, и, если подпись совпадает, запрос действителен.
Эта методология гарантирует, что ключ API никогда не отправляется как часть сообщения..
Посмотрите на PHP-функцию hash_hmac () , она популярна для отправки подписанных запросов.Как правило, вы заставляете пользователя делать что-то вроде помещения всех параметров в массив, сортировки по алфавиту, объединения в строку и затем hash_hmac
этой строки для получения сигма.В этом примере вы можете сделать:
$sig = hash_hmac("sha256",$params['email'].$params['userid'],$API_KEY)
Затем добавить это $sig
в URL REST, как упомянуто выше.