php http curl oauth-2.0

php - Forma correcta de configurar el token de portador con CURL



http oauth-2.0 (4)

Esta es una función CURL que utilizo para enviar / recuperar datos entre mis aplicaciones, que debería funcionar bien dentro de cualquier aplicación PHP que admita oAuth

function jwt_request($token, $post) { $ch = curl_init(''https://APPURL.com/api/json.php''); // INITIALISE CURL header(''Content-Type: application/json''); $post = json_encode($post); // Create JSON string from data ARRAY $authorization = "Authorization: Bearer ".$token; // **Prepare Autorisation Token** curl_setopt($ch, CURLOPT_HTTPHEADER, array(''Content-Type: application/json'' , $authorization )); // **Inject Token into Header** 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); }

Úselo como solicitudes de ida o de dos vías:

$token = "080042cad6356ad5dc0a720c18b53b8e53d4c274"; // GET YOUR TOKEN FROM A COOKIE OR DB $post = array(''some_trigger''=>''...'',''some_values''=>''...''); // ARRAY OF DATA WITH A TRIGGER $request = jwt_request($token,$post); // - To pass/retrieve data

Obtengo el token de portador desde un punto final de API y establezco lo siguiente:

$authorization = "Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

A continuación, deseo utilizar CURL para acceder al punto final seguro, pero no estoy seguro de cómo o dónde establecer el token de portador.

Lo he intentado pero no funciona:

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

EDITAR:

Según la documentación, se supone que debo usar el token de portador como tal: https://apigility.org/documentation/auth/authentication-oauth2

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


Esto debería funcionar

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


Reemplazar:

$authorization = "Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

con:

$authorization = "Authorization: Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274";

para que sea un encabezado de Autorización válido y en funcionamiento.


Si está trabajando con un token privado ( como la API de Gitlab ), debe reemplazar:

$authorization = "Authorization: Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

con:

$authorization = "PRIVATE-TOKEN 080042cad6356ad5dc0a720c18b53b8e53d4c274";