Cannot Get Token from Uber API with Valid Access K

2020-04-14 12:37发布

问题:

I've been trying for the past few days to integrate my app with uber, but for some reason during the oauth2 authentication I can't get uber to give me a valid token. I can get an access code but when using curl, I can't seem to get an access token, no matter how I arrange my script. Here's what I have:

<?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;

?>

I've double checked my secret and id, both are correct. I can see each time I'm going to get the access code it's something unique, I can see it echoed out on the authorization page I'm redirecting to, but no matter what I keep getting the response as:

{"error": "access_denied"}

回答1:

This error happens because:

  • You are not sending a redirect_uri parameter to the GET https://login.uber.com/oauth/v2/authorize endpoint and you also didn't set a redirect URI in Uber Developers Dashboard for the client application you are using in the API requests.

Redirect URL
These URLs will be used during OAuth Authentication.
If no redirect URI is included with your request, the default URL will be used.

  • You are sending an invalid redirect URL (the base of the URI is not the same as the redirect URL set in Uber Developers Dashboard),
    as the documentation for the GET https://login.uber.com/oauth/v2/authorize says:

redirect_uri (optional)
The URI we will redirect back to after an authorization by the resource owner.
The base of the URI must match the redirect_uri used during the registration of your application.



回答2:

Works fine for me. Make sure the Content-Type header is correct. Some services will expect that. (e.g. Content-Type=x-www-form-urlencoded)

Also, can yo share how you are requesting the code? (e.g. which scope are you using when sending the Authorization request, etc).



回答3:

I've also encountered this problem and it looks like I found the reason of it.

Try adding redirect_uri (the same as in app settings) to your request, so your params code should look like this:

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

That helped me, but I hope Uber developers will make this error more specific



回答4:

It worked for me perfectly. My problem was that I had a difference between the Url Redirect on Dashboard app and The parameter that i send to the request. I fixed it and everything works fine