Провайдер / Клиент 2-Legged OAuth Я правильно понимаю? (Пример реализации PHP) - PullRequest
0 голосов
/ 13 марта 2011

Я предоставляю API разработчика для набора данных, я хочу добавить двухстороннюю аутентификацию oauth, чтобы я мог аутентифицировать приложения разработчиков для использования API. Во-первых, является ли это лучшим решением для этого типа аутентификации?

Во-вторых, с точки зрения реализации / потока, мое понимание верно:

  1. Случайный разработчик, заходит на мой сайт и использует страницу «регистрации», на которой я генерирую им ключи API и секрет , которыеможет быть сгенерирован в любом случае.

  2. Затем они используют библиотеку oauth, такую ​​как php, найденную здесь , чтобы подписать свой запрос этими учетными данными.

    $ consumer = new OAuthConsumer ('thegeneratedkey', 'thegeneratedsecret');

$ sig_method = new OAuthSignatureMethod_HMAC_SHA1;

//use oauth lib to sign request
$req = OAuthRequest::from_consumer_and_token($consumer, null, "GET", 'http://mydonaim/api/', array('someapimethod', 'somevalue'));
$sig_method = new OAuthSignatureMethod_HMAC_SHA1();
$req->sign_request($sig_method, $consumer, null);//note: double entry of token
  1. Мой сервер тогдаиспользует библиотеку oauth для проверки «подписи» этого запроса для аутентификации приложения разработчика.

$ secret = 'secret';// Игнорируем эту строку.

$secret = 'secret'; // Use the $_GET['oauth_consumer_key'] to find the secret in my system.
$consumer = new OAuthConsumer($_GET['oauth_consumer_key'], $secret);
$sig_method = new OAuthSignatureMethod_HMAC_SHA1;

$method = $_SERVER['REQUEST_METHOD'];
$uri = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$sig = $_GET['oauth_signature'];    
$req = new OAuthRequest($method, $uri);

//token is null because we're doing 2-leg
$valid = $sig_method->check_signature( $req, $consumer, null, $sig );

Это правильно?

Если это так, нужно ли выполнять эту аутентификацию каждый раз, когда делается запрос, или я могу сгенерировать токен?каким-то образом уменьшить вес каждого HTTP-запроса от приложения разработчика к моему API?

1 Ответ

1 голос
/ 13 марта 2011

Во-первых, это лучшее решение для этого типа аутентификации?

OAuth предназначен для того, чтобы приложения могли получать пользовательские данные из стороннего сервиса, не зная учетные данные пользователя. Пока это то, что вам нужно сделать, тогда OAuth - правильное решение для вас.

Если да, то должна ли эта аутентификация выполняться каждый раз, когда делается запрос, или я могу сгенерировать токен какого-то рода, чтобы уменьшить вес каждого HTTP-запроса от приложения разработчика до моего API?

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

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

Не беспокойтесь о «весе» HTTP-запроса, если вы не выполнили сравнительный анализ и профилирование и не определили, что размер запросов - это то, над чем вам нужно работать. Я могу в значительной степени гарантировать, что это не проблема.

...