2

PHP で記述された onelogin API への単純な curl 要求があります。リクエストは端末からのパラメーターで正常に機能し、ユーザーにログインできますが、サーバーで実行する PHP バージョンはアクセス トークンを生成しますが、GET または POST リクエストを試行すると 401 エラーが発生します。あらゆる種類のcurlパラメーターを試しました。HTML フォームは、ランプ スタックでホストされているこの php ページに送信されます。動作しないようです。以下は、単純な GET リクエストを含む php スクリプトです。これについて何か助けていただければ幸いです:

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

?>

4

3 に答える 3

0

ここで推測しているだけですが、私の最善の策は、ベアラー トークン ヘッダーを正しく構成していないことです (OneLogin は、最後の ':' の後のスペースが気に入らず、ベアラー トークンの一部として解釈しています)。

だからあなたは試してみるべきです

$bearer_token = "Authorization: Bearer:". $a_token; // no space after Bearer: 
于 2016-07-06T21:20:13.327 に答える