Как получить токен запроса LinkedIn? - PullRequest
1 голос
/ 01 ноября 2011

Эй, я пытаюсь использовать OAuth LinkedIn в PHP.Я застрял на первом этапе получения токена запроса.Все, что я знаю, - вы публикуете некоторые значения на их сервере и получаете свой токен обратно.Поэтому я отправляю задокументированные аргументы в 'https://api.linkedin.com/uas/oauth/requestToken' и получаю сообщение об ошибке 400.

вот запрос:

$postArr = array();
//$postArr["oauth_callback"] = ""; idk they said this was optional...
$postArr["oauth_consumer_key"] = "ForBritishEyesOnly"; //is this the application secret key or the api key?
$postArr["oauth_nonce"] = "UltraRandomNonceFTW";
$postArr["oauth_timestamp"] = time();
$postArr["oauth_signature_method"] = "HMAC-SHA1"; //lolwut
$postArr["oauth_version"] = "1.0";

$params = array('http'=>array('method'=>'post','content'=>http_build_query($postArr)));
$context = stream_context_create($params);
$stream = file_get_contents('https://api.linkedin.com/uas/oauth/requestToken', false, $context);

Я не думаю, что мои аргументы POST верны, ноЛЮБАЯ помощь очень ценится - я просто не хочу прибегать к помощи чужой библиотеки, чтобы решить эту проблему.

------- РЕДАКТИРОВАТЬ: ПОПЫТКА 2 на вход Джеймса ---------

хорошо, вот я звоню по тестовой ссылке, которую вы мне прислали,я на самом деле могу получить ответ, но мне не нравится моя подпись (большой сюрприз, я знаю).Так насколько плохо я испортил шифрование?

//setup GET args
$url = "http://term.ie/oauth/example/request_token.php?";
$url .= "oauth_version=1.0&";
$url .= "oauth_nonce=" . rand(0, 100000) . "&";
$url .= "oauth_timestamp=" . time() . "&";
$url .= "oauth_consumer_key=key&";
$url .= "oauth_signature_method=HMAC-SHA1&";

//encrypt the request according to 'secret'
$sig = urlencode(base64_encode(hash_hmac("sha1", $url, "secret")));

//append the url encoded signature as the final GET arg
$url .= "oauth_signature=" . $sig;

//do it to it
echo file_get_contents($url);

РЕДАКТИРОВАТЬ Джеймсом

Попробуйте:

//setup GET args
$url = "http://term.ie/oauth/example/request_token.php?";
$url .= "oauth_consumer_key=key&";
$url .= "oauth_nonce=" . rand(0, 100000) . "&";
$url .= "oauth_signature_method=HMAC-SHA1&";
$url .= "oauth_timestamp=" . time() . "&";
$url .= "oauth_version=1.0&";

Ответы [ 2 ]

2 голосов
/ 07 июня 2012

Я на седьмом небе от счастья. Решил вернуться к этой проблеме и заставил ее работать. Вот несколько очень простых PHP для создания запроса токена для LinkedIn (он выводит тег привязки)

<?php
$endpoint = "https://api.linkedin.com/uas/oauth/requestToken";
$key = "YourAPIKey";
$secret = "YourAPISecret";
$params = array( 
    "oauth_version" => "1.0", 
    "oauth_nonce" => time(), 
    "oauth_timestamp" => time(), 
    "oauth_consumer_key" => $key, 
    "oauth_signature_method" => "HMAC-SHA1" 
);
function SortedArgumentString($inKV)
{
    uksort($inKV, 'strcmp');
    foreach ($inKV as $k => $v)
        $argument[] = $k."=".$v;
    return implode('&', $argument); 
}
$baseString = "GET&" . urlencode($endpoint) . "&" . urlencode(SortedArgumentString($params));
$params['oauth_signature'] = urlencode(base64_encode(hash_hmac('sha1', $baseString, $secret."&", TRUE))); 
echo "<a href=\"" . $endpoint . "?" . SortedArgumentString($params) . "\">Get Token<a/><br/>"; 
?>
1 голос
/ 01 ноября 2011

oauth_consumer_key - это значение, которое LinkedIn должен был присвоить вашему приложению.Вы зарегистрировались с ними?oauth_nonce должно отличаться для каждого запроса, чтобы предотвратить повторные атаки.Если вы используете HMAC-SHA1, вам нужно добавить поле oauth_signature самостоятельно.Создание подписи вручную - это всего лишь PITA.

Также есть много кодировки Base64 (с дополнительным бонусом некоторых специальных причудах OAuth).Я предлагаю вам прочитать спецификацию.

Есть тестовый сервер и клиент на по этой ссылке .Это очень полезно, когда вы изо всех сил пытаетесь получить правильный протокол.

...