获得访问令牌后,我想用它来读取受保护的数据(例如联系人)。但作为对我要求的请求的回应
Token invalid - Invalid AuthSub token.
Error 401
我将我发送的参数与OAuth Playground中的参数进行了比较,它们之间没有区别(时间戳,nonce和签名除外)。
我的标题看起来像这样:
Content-Type: application/atom+xml
Authorization: OAuth oauth_parameters
任何想法可能出错?
答案 0 :(得分:1)
我没有正确设置SESSION,所以我实际上使用了我的请求令牌而不是我的访问令牌:P
if(empty($_GET["oauth_token"])) {
$_SESSION["token_secret"] = $oauthTokenSecret;
$_SESSION["oauth_token"] = $oauth_token;
echo '<script>window.location="'.$auth_url.'";</script>';
}
else {
$oauth_token->key = urldecode($_GET["oauth_token"]);
$oauth_token->secret = $_SESSION["token_secret"];
echo "<Br>";
echo "<Br> FIRST OAUTH TOKEN: ";
echo $oauth_token->key;
echo "<Br>";
echo "<Br> FIRST OAUTH TOKEN SECRET: ";
echo $oauth_token->secret;
print_r($_SESSION);
echo "<Br>";
echo "<Br>";
// GET https://www.google.com/accounts/OAuthGetAccessToken
$req = OAuthRequest::from_consumer_and_token($consumer, $oauth_token, 'GET',
$token_endpoint.'OAuthGetAccessToken', array('oauth_verifier' => $_GET['oauth_verifier']));
$req->sign_request($sig_method, $consumer, $oauth_token, $privKey);
print_r($req);
$response = send_signed_request('GET', $token_endpoint.'OAuthGetAccessToken', array($req->to_header()));
@Rafal - 我会确保你已经获得了2个单独的令牌(一个用于初始请求,然后一个用于访问)。需要注意的另一件事是,使用新令牌/机密重建新签名很重要,因为如果保持不变,则返回“无效签名”。
由于在此过程中存在必要的重定向,因此必须将初始令牌保密在SESSION变量中。用户返回到您的应用后,将在URL中返回oauth_token,但令牌密钥不会。您必须将其存储在往返完成后可以访问的变量中。
如果您希望在会话中存储整个oauth_token对象,请确保在“session_start()”之前实例化对象
$oauth_token = new OAuthToken($oauthToken, $oauthTokenSecret);
session_start();
否则,当您重新打印从SESSION收到的令牌时,您将收到“不完整对象”警告。我花了很长时间在这个项目上,并且已经深深地参与了OAuth。请随时问我任何问题,拉法尔。