Ответ 1
Вы должны посмотреть подписание запроса. Отличным примером является API REST Amazon S3.
Обзор на самом деле довольно простой. У пользователя есть две важные части информации для использования вашего API, открытого идентификатора пользователя и частного ключа API. Они отправляют публичный идентификатор с запросом и используют закрытый ключ для подписи запроса. Принимающий сервер просматривает ключ пользователя и решает, действителен ли подписанный запрос. Поток выглядит примерно так:
- Пользователь присоединяется к вашей службе и получает идентификатор пользователя (например, 123) и API ключ.
- Пользователь хочет сделать запрос к вашему API-сервису для обновления своего адреса электронной почты, поэтому им необходимо отправить запрос на ваш API, возможно,
/user/[email protected]
. - Чтобы дать возможность проверить запрос, пользователь добавляет к вызову идентификатор пользователя и подпись, поэтому вызов становится
/user/[email protected]&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, как указано выше.