2016-07-06 8 views
1

Ich habe eine einfache Curl-Anfrage an die Onelogin API geschrieben in PHP. Die Anfrage funktioniert gut mit meinen Parametern von meinem Terminal und ich bin in der Lage, meinen Benutzer einzuloggen, aber die php-Version, die ich auf dem Server laufen lasse, erzeugt einen Zugriffs-Token, gibt aber einen 401 Fehler, wenn ich irgendwelche GET- oder POST-Anfragen versuche. Ich habe alle möglichen Curl-Parameter ausprobiert. Ein HTML-Formular wird an diese PHP-Seite gesendet, die auf einem LAMP-Stack gehostet wird. Scheint nicht zu funktionieren. Unten ist das PHP-Skript mit einer einfachen GET-Anfrage. schätzen würde wirklich jede Hilfe zu diesem Thema:onelogin api mit php curl 401 nicht autorisierte

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

>

Antwort

0

Ich kann nur raten hier, aber meine beste Wette ist, dass Sie nicht den Inhaber Token-Header richtig konfiguriert haben (ONELOGIN nicht mag der Raum nach dem letzten ‚:‘ und es als Teil des Trägers Token interpretiert)

so sollten Sie

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

Hallo John..danke ... aber das hat es nicht behoben! – skyfullofstars

+0

Dann ist es ein PHP-Coding-Problem, ich vermute. An dieser Stelle sieht es eher wie ein Codierungsfehler als ein Problem mit der API aus. beste Wette wäre zu a) dem Inhaber Token überprüfen Sie bekommen zurück, nur um sicher zu machen, beispielsweise für die zweite Anforderung richtig b) Machen Sie ein neues Request-Objekt analysiert geführt wird $ ch2 = curl_init ('https://api.us.onelogin.com/api/1/users'); Da Sie die erste Anfrage erneut verwenden, ist möglicherweise weiterhin ein POST eingerichtet (der zweite Endpunkt ist ein GET) und möglicherweise mit anderen Optionen überfüllt, die von dieser ersten Anfrage übrig geblieben sind. Besser mit einer sauberen Weste zu beginnen –

+0

a) Ja ... das wurde ... getestet und in die nächste Funktion geschickt. b) Neues Anfrageobjekt $ ch2 erstellt ..... Beachten Sie, dass dies auch bei meinen POST-Anfragen fehlschlägt! ....... hat nicht funktioniert! – skyfullofstars

0

Angesichts des Scheiterns meiner ersten Antwort versuchen ...

Überprüfen Sie den Träger Token Sie nur immer wieder sicherzustellen, dass es korrekt analysiert aus

ein neues Anforderungsobjekt für die zweite Anforderung Stellen wird z

$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)); 

Da Sie die erste Anforderung sind die Wiederverwendung, könnte es noch eine POST tun eingestellt werden (der zweite Endpunkt ist ein GET) und möglicherweise mit anderen Optionen übrig blieben von dieser ersten Anfrage überladen werden.

+0

Versucht, dass ... ich arbeite ... bitte siehe oben! – skyfullofstars

+0

Versuchen Sie, eine GET-Operation auf dem Benutzerendpunkt auszuführen - POST wird nicht unterstützt (es sei denn, es wird ein Benutzer geändert, in diesem Fall ist die Syntax anders und Sie müssen Anmeldeinformationen verwenden, die Lese-/Schreibzugriff zulassen) –

+0

Bitte lesen Sie die erste Post sorgfältig !! Ich habe erwähnt, dass weder GET noch POST Anfragen funktionieren. Ich habe die Berechtigung "Benutzer verwalten" für die API-Berechtigungsnachweise ..... und meine Befehle funktionieren einwandfrei vom Terminal aus! – skyfullofstars

0

Dies bewirkt, dass Ihre Probleme

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

Sie zweimal verwenden curl_exec!

Verwandte Themen