2013-12-06 2 views
4

хороший день,OAuth2 возвращает ошибку invalid_client

У меня возникли проблемы с получением токена доступа. Я следовал руководство здесь: http://developers.box.com/oauth/ и уже получить мой client_id, client_secret и установите redirect_uri на настройках App (OAuth2 параметров) раздел.

Вот код для файла client.php

<?php 
    $client_id = 'my_client_id_here'; //removed 
    $post_url = 'https://www.box.com/api/oauth2/authorize'; 

    include 'includes/header.php'; 
?> 
    <div id="content"> 
     <form action="<?php echo $post_url; ?>" type="POST" enctype="application/x-www-form-urlencoded"> 
      <input type="text" name="response_type" value="code"> 
      <input type="text" name="client_id" value="<?php echo $client_id; ?>"> 
      <input type="text" name="state" value="vexhax97td8xf_SomeTemporaryValueForTesting"> 
      <input type="submit"> 
     </form> 
     <div id="response"></div> 
    </div> 

<?php 
    include 'includes/footer.php'; 
?> 

и вот код для файла something.php (это где redirect_uri пойдет)

<?php 

$client_id = 'my_client_id_here'; //removed 
$client_secret = 'my_client_secrect_here'; //removed 
$post_url = 'https://www.box.com/api/oauth2/token'; 

$code = $_GET['code']; 

include 'includes/header.php'; 

$fields_params = array(
     "grant_type" => 'authorization_code', 
     "code" => $code, 
     "client_id" => $client_id, 
     "client_secret" => $client_secret 
    ); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $post_url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_params); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json', 
    'Accept: application/json' 
)); 

$data = curl_exec($ch); 
curl_close($ch); 

$json = json_decode($data, true); 
var_dump($json); 

?> 
    <div id="content"> 
     <?php 
      //Nothing fancy, just for displaying passed values 
      if (isset($_GET)) 
       var_dump($_GET); 

      if (isset($_POST)) 
       var_dump($_POST); 
     ?> 
    </div> 

<?php 
    include 'includes/footer.php'; 
?> 

... сейчас случается,

1.) на первом этапе (client.php), там есть форма с кнопкой отправки.

2.) После того, как я нажал на кнопку отправки, я перенаправляюсь на страницу входа в Бокс с помощью кнопки «Авторизовать».

3.) после ввода регистрационных данных и разрешения предоставления доступа для моего приложения. Теперь я перенаправляюсь на redirect_uri, который я установил в настройках приложения (something.php), где в этом файле он выполнит завиток, чтобы получить токен доступа, но я застрял в этой части, локонов результат возвращается с ошибкой:

array(2) { ["error"]=> string(14) "invalid_client" ["error_description"]=> string(34) "The client credentials are invalid" } 

Я уверен, что я вошел в мой client_id и client_secret правильно, который я, полученный из настроек приложения. И URL-адрес для redirect_uri, также включен SSL.

Любые решения, идеи, почему это происходит?

Благодарим за помощь.

ответ

4

Проблема в заголовках cURL, которые вы устанавливаете something.php. Удалите заголовок Content-Type. Фактически, вы не можете устанавливать заголовки вообще - cURL отправит правильно закодированные параметры, и Box по умолчанию возвратит данные JSON.

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: application/json' 
)); 
+0

Wow! работает как шарм! Спасибо @ Энди Джонс! :) – user3072698

+0

Вы только что сделали мой день! –

1

Вот как я получил маркер в JS

authorizeUser = function(){  

     var results = $.ajax({ 

      // The URL to process the request 
      url : 'https://www.box.com/api/oauth2/token', 
      type : 'POST', 
      data : { 
       grant_type : 'authorization_code', 
       code : data.boxAuthorizationCode, 
       client_id : data.clientId, 
       client_secret : data.clientSecret 
      }, 
      beforeSend: function (xhr) { 
    xhr.setRequestHeader("Authorization", "Bearer $token") 
}, 
      dataType: "json", 
      success: function(response) { 
       //console.log(response); 
       console.log(response.access_token); 
       data.access_token = response.access_token; 
       tokenGranted(); 
      } 

     }); 

     return results.responseText; 

    }, 
Смежные вопросы