如何获得LinkedIn请求令牌?

时间:2011-10-31 23:52:32

标签: post oauth linkedin

嘿,我正在尝试在PHP中使用LinkedIn的OAuth。我陷入了获取请求令牌的第一步。我所知道的是你将一些值发布到他们的服务器并获得你的令牌。所以我将记录下来的args发布到'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);

James编辑

尝试:

//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 个答案:

答案 0 :(得分:2)

我在云九。决定重新审视这个问题并让它发挥作用。这里有一些非常简单的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 :(得分:1)

oauth_consumer_key是LinkedIn应该为您的应用分配的值。你有没有注册? 每个请求的oauth_nonce应该不同,以防止重放攻击。 如果您使用的是HMAC-SHA1,则需要自己添加oauth_signature字段。手动创建签名是一个完整的PITA。

还有很多Base64编码要做(还有一些特殊的OAuth怪癖)。我建议你阅读规范。

this link处有一个测试服务器和客户端。当你努力使协议正确时,它非常有用。