Передача ключей api для отдыха api

Я работаю с phil sturgeon REST_Controller для codeigniter для создания REST api, до сих пор мне удалось создать простую библиотеку для генерации ключей api для пользователей. Моя проблема теперь отправляет ключ api в API для каждого запроса, как я делаю это без необходимости вручную отправлять его для каждого запроса.

Solutions Collecting From Web of "Передача ключей api для отдыха api"

Вы должны заглянуть в подписание запроса. Отличным примером является API SAS REST от Amazon .

Обзор на самом деле довольно простой. У пользователя есть две важные части информации для использования вашего API, открытого идентификатора пользователя и частного ключа API. Они отправляют публичный идентификатор с запросом и используют закрытый ключ для подписи запроса. Принимающий сервер просматривает ключ пользователя и решает, действителен ли подписанный запрос. Поток выглядит примерно так:

  1. Пользователь присоединяется к вашей службе и получает идентификатор пользователя (например, 123) и ключ API.
  2. Пользователь хочет сделать запрос к вашему API-сервису для обновления своего адреса электронной почты, поэтому им необходимо отправить запрос на ваш API, возможно, на /user/update?email=new@example.com .
  3. Чтобы дать возможность проверить запрос, пользователь добавляет идентификатор пользователя и подпись к вызову, поэтому вызов становится /user/update?email=new@example.com&userid=123&sig=some_generated_string
  4. Сервер получает вызов, видит, что он от userid = 123, и ищет ключ API для этого пользователя. Затем он реплицирует шаги для создания подписи из данных, и если подпись соответствует, запрос действителен.

Эта методология гарантирует, что ключ API никогда не будет отправлен как часть сообщения .

Взгляните на функцию hash_hmac () PHP, она популярна для отправки подписанных запросов. Как правило, вы получаете от пользователя что-то вроде поместить все параметры в массив, отсортировать по алфавиту, hash_hmac в строку и затем hash_hmac эту строку, чтобы получить сиг. В этом примере вы можете:

 $sig = hash_hmac("sha256",$params['email'].$params['userid'],$API_KEY) 

Затем добавьте этот $sig на URL REST, как указано выше.

Идея REST заключается в том, что она без гражданства, поэтому никаких сеансов и ничего. Если вы хотите выполнить аутентификацию, тогда это ключи, в которые входят ключи, и ключи должны передаваться для каждого запроса, и каждый запрос аутентифицирует пользователя (поскольку REST является апатридом, я упоминал об этом?).

Существуют различные способы передачи ключа. Вы можете передать его как параметр (например, http://example.com/api/resource/id?key=api_key ), или вы можете передать его как часть заголовков HTTP. Я видел API, которые указывают, что вы отправляете свое имя пользователя и ключ API в качестве части пароля заголовка авторизации основного доступа HTTP.

Пример запроса:

 <?php $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => 'http://example.com/api/resource/id', CURLOPT_USERPWD => 'martinbean:4eefab4111b2a' )); $response = curl_exec($ch); 

Где martinbean будет моим именем пользователя на вашем сайте, а 4eefab4111b2a будет моим ключом API.