9

Reddit アクセス トークンを更新できません。

次のリクエストを送信するとhttps://ssl.reddit.com/api/v1/access_token

Content-Type: application/x-www-form-urlencoded
Authorization: #####
client_secret=#####&grant_type=refresh_token&client_id=#####&refresh_token=#####

ステータスは取得できます200が、内容は{"error": "invalid_request"}です。

OAuth 2.0 仕様Reddit 仕様によると、私はすべてを正しく行っています。

私もそれなしclient_idで試してみましclient_secretたが、同じ結果が得られました。

何か不足していますか?

4

2 に答える 2

22

Reddit の OAuth 実装は実にユニークです (良い意味ではありません)。

reddit でトークンを更新するために必要なパラメーターは次のとおりです。

  1. クライアントID
  2. client_secret
  3. grant_type (=refresh_token)
  4. refresh_token
  5. 範囲
  6. 間隔
  7. redirect_uri

また、 client_idを login として、client_secretをパスワードとして持つ基本的な HTTP 認証ヘッダーも必要です。

リクエストに何が欠けているかを把握するために、reddit のソース コードを調べなければなりませんでした...些細なことで多くの開発時間が失われました。

于 2013-03-25T06:49:52.313 に答える
2

誰かがより明確な答えを探している場合:

PHPでこれを行う方法は次のとおりです。

    $authorizeUrl = 'https://ssl.reddit.com/api/v1/access_token';
    $clientId = "YOUR_CLIENT_ID";
    $clientSecret = "YOUR_CLIENT_SECRET";

    $post = array(
        "client_id" => $clientId,
        "client_secret" => $clientSecret,
        "grant_type" => "refresh_token",
        "refresh_token" => "STORED_REFRESH_TOKEN_VALUE",
        "scope" => "identity",
        "state" => "WHATEVER_VALUE",
        "duration" => "temporary",          
        "redirect_uri" => "https://example.com/reddit",
    );

    $payload = http_build_query($post);

    $ch = curl_init($authorizeUrl);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_USERPWD, $clientId . ":" . $clientSecret);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $result = curl_exec($ch);
    curl_close($ch);        

    print_r($result);
于 2014-02-07T00:42:52.170 に答える