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;
>
Hallo John..danke ... aber das hat es nicht behoben! – skyfullofstars
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 –
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