1

アクセス トークンを取得したら、それを使用して保護されたデータ (連絡先など) を読み取りたいと思います。しかし、私が得ている要求への応答として
Token invalid - Invalid AuthSub token.
Error 401

送信しているパラメーターを OAuth Playground からのパラメーターと比較しましたが、それらの間に違いはありません (タイムスタンプ、ノンス、および理解できる署名を除く)。
私のヘッダーは次のようになります。
Content-Type: application/atom+xml
Authorization: OAuth oauth_parameters

何がうまくいかないのでしょうか?

4

1 に答える 1

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 つの個別のトークンを取得したことを確認します (1 つは最初の要求用で、もう 1 つはアクセス用です)。注意すべきもう 1 つの点は、同じままにしておくと「無効な署名」が返されるため、新しいトークン/シークレットを使用して新しい署名を再構築することが重要です。

このプロセス中に必要なリダイレクトがあるため、最初のトークンの秘密を SESSION 変数に保持する必要があります。ユーザーがアプリに戻った後、oauth_token は URL で返されますが、トークン シークレットは返されません。往復が完了した後にアクセスできる変数に格納する必要があります。

oauth_token オブジェクト全体をセッションに保存する場合は、「session_start()」の前にオブジェクトをインスタンス化してください。

$oauth_token = new OAuthToken($oauthToken, $oauthTokenSecret);

session_start();

そうしないと、SESSION から受け取ったトークンを再印刷するときに、「不完全なオブジェクト」という警告が表示されます。私はこのプロジェクトに長い時間を費やし、OAuth に深く関わるようになりました。ご不明な点がございましたら、お気軽にラファルまでお問い合わせください。

于 2011-05-27T19:08:48.170 に答える