Richtige Methode zum Setzen des Bearer-Tokens mit CURL

81

Ich erhalte mein Inhaber-Token von einem API-Endpunkt und setze Folgendes fest:

$authorization = "Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

Als nächstes möchte ich CURL verwenden, um auf den sicheren Endpunkt zuzugreifen. Ich bin mir jedoch nicht sicher, wie oder wo ich das Bearer-Token setzen soll.

Ich habe es versucht, aber es funktioniert nicht:

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

BEARBEITEN:

Der Dokumentation zufolge soll ich das Inhaber-Token als solches verwenden: https://apigility.org/documentation/auth/authentication-oauth2

GET /oauth/resource HTTP/1.1
Accept: application/json
Authorization: Bearer 907c762e069589c2cd2a229cdae7b8778caa9f07
HappyCoder
quelle
Ist das PHP? Wie erwartet der Server, dass dieses Token gesendet wird? Ein Header?
Hallo - ja, das ist PHP, im Allgemeinen wird das Inhaber-Token als Header gesetzt.
HappyCoder
Wie heißt der Header?
Ich habe eine Bearbeitung aus der Dokumentation hinzugefügt.
HappyCoder

Antworten:

115

Ersetzen:

$authorization = "Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

mit:

$authorization = "Authorization: Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274";

um es zu einem gültigen und funktionierenden Autorisierungsheader zu machen.

Hans Z.
quelle
Hallo - das habe ich versucht, allerdings mit dem gleichen Problem. Ich vermute, dass das Problem möglicherweise mit einem Apigility-Update zu tun hat, da ich dies auch bei Postboten nicht zum Laufen bringen kann.
HappyCoder
Dies wurde behoben, indem ApiGility auf eine frühere stabile Version zurückgesetzt wurde. Vielen Dank für Ihre Eingabe, obwohl nicht meine Lösung, es ist eine Lösung für andere mit einem ähnlichen Problem und hat mich auf den richtigen Weg gebracht. Danke für deinen Beitrag!
HappyCoder
Kannst du dabei helfen? stackoverflow.com/questions/58581568/…
user4271704
36

Dies ist eine cURL-Funktion, die Daten senden oder abrufen kann. Es sollte mit jeder PHP-App funktionieren, die OAuth unterstützt:

    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

    }

Verwenden Sie es für Einweg- oder Zweiweganfragen:

$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
quelle
Jemand hat eine negative Abstimmung hinzugefügt. Könnten Sie dies bitte in den Kommentaren unten erläutern?
SergeDirect
2
Danke Serge ... Ich habe zu lange mit einem solchen Anruf zu kämpfen. ALLE Dokumente sagen "Erstellen Sie das POST-Array mit http_build_query ()." ABER das funktioniert nicht - ich weiß nicht, ob es eine OAuth-Besonderheit ist, aber was Sie brauchen, ist json_encode, wie Sie hier zeigen. Virtuelles Bier verschickt.
anoldermark
2
@anoldermark Ich bin froh, hilfreich zu sein. Vielen Dank für den Daumen nach oben, macht einen echten Unterschied. Es braucht Zeit und Mühe, um qualitativ hochwertige Antworten zu schreiben. Upvotes und positive Kommentare sind ermutigend ... um mehr zu schreiben, um gut zu schreiben;)
SergeDirect
@ SergeDirect, Wie werden wir Post-Werte in der Datei APPURL.com/api/json.php erhalten und wie funktioniert jwt authitication.Bitte geben Sie ein Beispiel.
Akgola
1
Kannst du dabei helfen? stackoverflow.com/questions/58581568/…
user4271704
11

Das sollte funktionieren

$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);
Sudirman Hung
quelle
3

Beispiel für einen Verzehr:

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$token = 'your_token';

$httpClient = new Client();

$response = $httpClient->get(
    'https://httpbin.org/bearer',
    [
        RequestOptions::HEADERS => [
            'Accept' => 'application/json',
            'Authorization' => 'Bearer ' . $token,
        ]
    ]
);

print_r($response->getBody()->getContents());

Siehe https://github.com/andriichuk/php-curl-cookbook#bearer-auth

Serhii Andriichuk
quelle
1

Wie bei PHP 7.3:

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BEARER);
curl_setopt($ch,CURLOPT_XOAUTH2_BEARER,$bearerToken);
Pancho
quelle
0

Wenn Sie stattdessen mit einem privaten Token ( wie der Gitlab-API ) arbeiten, sollten Sie Folgendes ersetzen:

$authorization = "Authorization: Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

mit:

$authorization = "PRIVATE-TOKEN 080042cad6356ad5dc0a720c18b53b8e53d4c274";

GuGuss
quelle
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;

?>
Raj Shekhar
quelle