Otrzymuję token okaziciela z punktu końcowego interfejsu API i ustawiam następujące ustawienia:
$authorization = "Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"
Następnie chcę użyć CURL, aby uzyskać dostęp do bezpiecznego punktu końcowego, jednak nie jestem pewien, jak i gdzie ustawić token okaziciela.
Próbowałem tego, ale to nie działa:
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);
EDYTOWAĆ:
Zgodnie z dokumentacją mam używać tokena okaziciela jako takiego: https://apigility.org/documentation/auth/authentication-oauth2
GET /oauth/resource HTTP/1.1
Accept: application/json
Authorization: Bearer 907c762e069589c2cd2a229cdae7b8778caa9f07
Odpowiedzi:
Zastąpić:
$authorization = "Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"
z:
$authorization = "Authorization: Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274";
aby był prawidłowym i działającym nagłówkiem autoryzacji.
źródło
Jest to funkcja cURL, która może wysyłać lub pobierać dane. Powinien działać z każdą aplikacją PHP obsługującą OAuth:
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 }
Użyj go w ramach żądań jednokierunkowych lub dwukierunkowych:
$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
źródło
To powinno działać
$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);
źródło
Przykład Guzzle:
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());
Zobacz https://github.com/andriichuk/php-curl-cookbook#bearer-auth
źródło
Jak w PHP 7.3:
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BEARER); curl_setopt($ch,CURLOPT_XOAUTH2_BEARER,$bearerToken);
źródło
Jeśli zamiast tego pracujesz z prywatnym tokenem ( takim jak Gitlab API ), powinieneś wymienić:
$authorization = "Authorization: Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"
z:
$authorization = "PRIVATE-TOKEN 080042cad6356ad5dc0a720c18b53b8e53d4c274";
źródło
<?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; ?>
źródło