CURLでベアラートークンを設定する正しい方法


87

APIエンドポイントからベアラートークンを取得し、次のように設定します。

$authorization = "Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

次に、CURLを使用して安全なエンドポイントにアクセスしたいのですが、Bearerトークンをどこにどのように設定するかがわかりません。

私はこれを試しましたが、機能しません:

 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization ));
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $result = curl_exec($ch);
    curl_close($ch);
    return json_decode($result);

編集:

ドキュメントによると、私はベアラートークンをそのまま使用することになっています:https//apigility.org/documentation/auth/authentication-oauth2

GET /oauth/resource HTTP/1.1
Accept: application/json
Authorization: Bearer 907c762e069589c2cd2a229cdae7b8778caa9f07

これはPHPですか?サーバーはこのトークンが送信されることをどのように期待しますか?ヘッダー?

こんにちは-はい、これはPHPです。通常、ベアラトークンはヘッダーとして設定されます。
HappyCoder 2015年

ヘッダーの名前は何ですか?

ドキュメントから編集を追加しました。
HappyCoder 2015年

回答:


120

交換:

$authorization = "Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

と:

$authorization = "Authorization: Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274";

有効で機能するAuthorizationヘッダーにします。


こんにちは-これは私が試したものですが、同じ問題があります。私はこれを郵便配達員でも機能させることができないので、この問題はApigilityの更新に関係しているのではないかと思います。
HappyCoder 2015年

ApiGilityを以前の安定バージョンにロールバックすることでこれを解決しました。あなたの入力に感謝します、私の解決策ではありませんが、それは同様の問題を抱えている他の人のための解決策であり、それは私を正しい軌道に乗せました。ご意見ありがとうございます!
HappyCoder 2015年

あなたはこれを助けることができますか?stackoverflow.com/questions/58581568/...
user4271704

38

これは、データを送信または取得できるcURL関数です。OAuthをサポートするすべてのPHPアプリで動作するはずです。

    function jwt_request($token, $post) {

       header('Content-Type: application/json'); // Specify the type of data
       $ch = curl_init('https://APPURL.com/api/json.php'); // Initialise cURL
       $post = json_encode($post); // Encode the data array into a JSON string
       $authorization = "Authorization: Bearer ".$token; // Prepare the authorisation token
       curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization )); // Inject the token into the header
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
       curl_setopt($ch, CURLOPT_POST, 1); // Specify the request method as POST
       curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // Set the posted fields
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // This will follow any redirects
       $result = curl_exec($ch); // Execute the cURL statement
       curl_close($ch); // Close the cURL connection
       return json_decode($result); // Return the received data

    }

一方向または双方向のリクエスト内で使用します。

$token = "080042cad6356ad5dc0a720c18b53b8e53d4c274"; // Get your token from a cookie or database
$post = array('some_trigger'=>'...','some_values'=>'...'); // Array of data with a trigger
$request = jwt_request($token,$post); // Send or retrieve data

誰かが反対票を追加しました。下のコメントで詳しく教えてください。
SergeDirect 2018

2
ありがとうセルジュ...このような電話で長い間苦労してきました。すべてのドキュメントには、「http_build_query()を使用してPOST配列を構築する」と書かれています。しかし、それは機能しません-それがOAuthの特性であるかどうかはわかりませんが、ここに示すように、必要なのはjson_encodeです。バーチャルビールが送られました。
anoldermark

2
@anoldermarkお役に立ててうれしいです。親指を立ててくれてありがとう、本当の違いを生む。質の高い回答を書くには時間と労力がかかります。賛成票と肯定的なコメントは励みになります...もっと書く、良いものを書く;)
SergeDirect18年

@ SergeDirect、ファイルAPPURL.com/api/json.phpでPOST値を取得する方法 と、jwt認証がどのように機能するか。例を挙げてください。
akgola

1
あなたはこれを助けることができますか?stackoverflow.com/questions/58581568/...
user4271704

11

これはうまくいくはずです

$token = "YOUR_BEARER_AUTH_TOKEN";
//setup the request, you can also use CURLOPT_URL
$ch = curl_init('API_URL');

// Returns the data/output as a string instead of raw data
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//Set your auth headers
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   'Content-Type: application/json',
   'Authorization: Bearer ' . $token
   ));

// get stringified data/output. See CURLOPT_RETURNTRANSFER
$data = curl_exec($ch);

// get info about the request
$info = curl_getinfo($ch);
// close curl resource to free up system resources
curl_close($ch);


1

PHP 7.3と同様:

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BEARER);
curl_setopt($ch,CURLOPT_XOAUTH2_BEARER,$bearerToken);

0

代わりにプライベートトークン(Gitlab APIなど)を使用している場合は、次のものを置き換える必要があります。

$authorization = "Authorization: Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

と:

$authorization = "PRIVATE-TOKEN 080042cad6356ad5dc0a720c18b53b8e53d4c274";


0
<?php
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "your api goes here",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer eyJ0eciOiJSUzI1NiJ9.eyJMiIsInNjb3BlcyI6W119.K3lW1STQhMdxfAxn00E4WWFA3uN3iIA"
  ),
 ));

$response = curl_exec($curl);
$data = json_decode($response, true);

echo $data;

?>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.