[PHP]使用google api oauth访问令牌时,错误401令牌无效

时间:2011-02-10 11:05:26

标签: php api oauth http-status-code-401

获得访问令牌后,我想用它来读取受保护的数据(例如联系人)。但作为对我要求的请求的回应 Token invalid - Invalid AuthSub token.
Error 401

我将我发送的参数与OAuth Playground中的参数进行了比较,它们之间没有区别(时间戳,nonce和签名除外)。
我的标题看起来像这样:
Content-Type: application/atom+xml
Authorization: OAuth oauth_parameters

任何想法可能出错?

1 个答案:

答案 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。请随时问我任何问题,拉法尔。