2

ここ数日、自分のアプリを uber に統合しようとしてきましたが、何らかの理由で oauth2 認証中に uber から有効なトークンを取得できません。アクセス コードは取得できますが、curl を使用すると、スクリプトをどのように配置してもアクセス トークンを取得できないようです。ここに私が持っているものがあります:

<?php

echo $_GET['code']."<br>";
$token = curl_init();
$param = array(
    'client_secret' => 'MY_SECRET',
    'client_id' => 'MY_ID',
    'grant_type' => 'authorization_code',
    'code' => "{$_GET['code']}"
    );
$postData = '';
foreach($param as $k => $v)
    {
       $postData .= $k . '='.urlencode($v).'&';
    }
$postData = rtrim($postData, '&');
curl_setopt($token, CURLOPT_URL, 'https://login.uber.com/oauth/token');
curl_setopt($token, CURLOPT_HEADER, true);
curl_setopt($token, CURLOPT_RETURNTRANSFER, true);
curl_setopt($token, CURLOPT_POST, true);
curl_setopt($token, CURLOPT_POSTFIELDS, $postData);
$returned_token = curl_exec($token);
curl_close($token);
echo $returned_token;

?>

シークレットと ID を再確認しましたが、どちらも正しいです。アクセスコードを取得するたびに、それが一意のものであることがわかります。リダイレクト先の認証ページにエコーアウトされていることがわかりますが、何に関係なく、次のような応答が返されます。

{"error": "access_denied"}
4

4 に答える 4

2

このエラーは、次の理由で発生します。

リダイレクト URL
これらの URL は、OAuth 認証中に使用されます。
リクエストにリダイレクト URI が含まれていない場合は、デフォルトの URL が使用されます。

  • GET https://login.uber.com/oauth/v2/authorize
    のドキュメントにあるように、無効なリダイレクト URL を送信しています (URI のベースは、Uber 開発者ダッシュボードで設定されたリダイレクト URL と同じではありません) 。 :

redirect_uri (オプション)
リソース所有者による承認後にリダイレクトする URI。
URI のベースは、アプリケーションの登録時に使用された redirect_uri と一致する必要があります。

于 2016-02-25T20:56:39.623 に答える
0

私にとってはうまくいきます。Content-Typeヘッダーが正しいことを確認してください。一部のサービスはそれを期待します。(例Content-Type=x-www-form-urlencoded)

また、どのようにリクエストしているのか教えていただけますcodeか? (たとえばscope、承認リクエストを送信するときにどちらを使用していますかなど)。

于 2015-05-24T23:34:07.100 に答える
0

私もこの問題に遭遇しましたが、その理由を見つけたようです。

リクエストにredirect_uri (アプリ設定と同じ) を追加してみてください。params コードは次のようになります。

$param = array(
'client_secret' => 'MY_SECRET',
'client_id' => 'MY_ID',
'redirect_uri' => 'MY_REDIRECT_URI',
'grant_type' => 'authorization_code',
'code' => "{$_GET['code']}"
);

それは私を助けましたが、Uber 開発者がこのエラーをより具体的にしてくれることを願っています

于 2015-06-24T18:09:13.153 に答える