2016-07-06 5 views
1

У меня есть простой запрос curl на onelogin api, написанный на PHP. Запрос отлично работает с моими параметрами с моего терминала, и я могу войти в систему с моим пользователем, однако версия php, которую я запускаю на сервере, генерирует токен доступа, но затем дает ошибку 401, когда я пытаюсь выполнить любые запросы GET или POST. Ive пробовал всевозможные параметры завитка. Форма html отправляется на эту php-страницу, размещенную в стеке лампы. Кажется, не работает. Ниже приведен скрипт php с простым запросом GET. Будет очень признательна за любую помощь по этому:onelogin api с php curl 401 несанкционированный

<?php 

//form will post these variables for post request 
//$username = $_POST['uname']; 
//$password = $_POST['pwd']; 

$data = array("grant_type" => "client_credentials"); 
$data_string = json_encode($data); 

$ch = curl_init('https://api.us.onelogin.com/auth/oauth2/token'); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Authorization: client_id:XXX, client_secret:XXX", 
    "Content-Type: application/json") 
); 

//execute post 
$result = curl_exec($ch); 

if(!curl_exec($ch)){ 
    die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch)); 
} 

//parsse out bearer token and set header 
$json = json_decode($result, true); 
$a_token = $json['data'][0]['access_token']; 
$bearer_token = "Authorization: bearer: ". $a_token; 

curl_setopt($ch, CURLOPT_URL, "https://api.us.onelogin.com/api/1/users"); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array($bearer_token)); 

//execute 
$result2 = curl_exec($ch); 

if(!curl_exec($ch)){ 
    die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch)); 
} 

//close connection 
curl_close($ch); 

echo $result2; 

>

ответ

0

Я просто предполагаю здесь, но мой лучший выбор в том, что вы не настроили однонаправленные маркера заголовка правильно (OneLogin не нравится пространство после последнего «:» и интерпретирует его как часть маркера на предъявителя)

Таким образом, вы должны попробовать

$bearer_token = "Authorization: Bearer:". $a_token; // no space after Bearer: 
+0

Hi John..thanks ... но это не исправить! – skyfullofstars

+0

Тогда это проблема с кодировкой php, я предполагаю. На данный момент это больше похоже на ошибку кодирования, чем на проблему с API. Лучшая ставка будет а) проверить маркер носителя вы получаете обратно, просто чтобы убедиться, что в настоящее время анализируется правильно б) Создайте новый объект запроса для 2-го запроса, например, $ ch2 = curl_init ('https://api.us.onelogin.com/api/1/users'); Поскольку вы повторно используете первый запрос, он все равно может быть настроен на выполнение POST (эта вторая конечная точка является GET) и может быть загромождена другими вариантами, оставшимися после этого первого запроса. Лучше начать с чистого листа –

+0

a) Да .. пробовал, что ... его разбирают и отправляют в следующую функцию правильно. b) Создал новый объект запроса $ ch2 ..... Обратите внимание, что это также не удается для моих запросов POST! ....... ни один не работал! – skyfullofstars

0

Учитывая провал моего первого ответа ...

Проверьте маркер носителя вы получаете обратно, просто чтобы убедиться, что в настоящее время анализируется правильно

Создайте новый объект запроса для 2-го запроса, например,

$ch2 = curl_init('api.us.onelogin.com/api/1/users'); 

curl_setopt($ch2, CURLOPT_CUSTOMREQUEST, "GET"); 
curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch2, CURLOPT_HTTPHEADER, array($bearer_token)); 

Так как вы повторно использовать первый запрос, он все еще может быть установлен, чтобы сделать POST (что вторая конечная точка является GET) и может быть завален с другими вариантами, оставшихся от первого запроса.

+0

Пробовал, что..didnt работать ..... см. выше! – skyfullofstars

+0

Попробуйте выполнить операцию GET на конечной точке пользователя - она ​​не поддерживает POST (если только это не изменение пользователя, и в этом случае синтаксис отличается, и вы должны использовать учетные данные, которые разрешают доступ для чтения/записи). –

+0

. первоначальный пост тщательно !! Я упомянул, что ни GET, ни POST-запросы не работают. У меня есть разрешение «Управление пользователями» на учетные данные api ..... и мои команды отлично работают с терминалом! – skyfullofstars

0

Это вызывает ваши проблемы

if(!curl_exec($ch)){ 
    die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch)); 
} 

вы используете curl_exec дважды!

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