issue with PHP/Curl using Auth0

Viewed 37

I am attempting to use Auth0 to secure an API on Laravel Framework 8.83.22

I am using this tutorial (machine-to-machine) https://auth0.com/blog/build-and-secure-laravel-api/

Problem:

Curl at the command line works fine:

curl -X GET -H "Authorization: Bearer ***REMOVED***" -H "Content-Type: application/json" -d "{}" http://localhost:8000/api/weightrecords/4195

However, making the call inside a PHP script times out (I've tried longer timeouts with no help). I get the token fine (SECTION 1 below) but SECTION 2 times out (cURL Error #:Operation timed out after 30000 milliseconds with 0 bytes received).

public function test_api()
    {

    //SECTION 1: Get the token
        $curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_URL => "https://**REMOVED***.auth0.com/oauth/token",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => "{\"client_id\":\"qDpVdykOlRYkxOdq8J7a2CJ7X7E3WUK8\",\"client_secret\":\"**REMOVED**\",\"audience\":\"**REMOVED**",\"grant_type\":\"client_credentials\"}",            
            CURLOPT_HTTPHEADER => array(
                "content-type: application/json"
            ),
        ));
        
        $response = curl_exec($curl);
        $err = curl_error($curl);
        
        curl_close($curl);
        
        if ($err) {
            echo "cURL Error #:" . $err;
        } else {
            $response_array = json_decode($response);
     
            $access_token = "authorization: Bearer " . $response_array->access_token;
            echo $access_token;
        }

    //SECTION 2: Use the token
        $curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_VERBOSE => true,
            CURLOPT_URL => "http://127.0.0.1:8000/api/weightrecords/4195",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET",
            CURLOPT_HTTPHEADER => array(
                $access_token
            ),
        ));

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            echo "cURL Error #:" . $err;
        } else {
            echo $response;
        }

    }

.env

    AUTH0_STRATEGY=api
    AUTH0_DOMAIN=**REMOVED**.us.auth0.com
    AUTH0_CLIENT_ID=qDpVdykOlRYkxOdq8J7a2CJ7X7E3WUK8
    AUTH0_AUDIENCE=**REMOVED**
    API_IDENTIFIER=**REMOVED**

kernal.php

    protected $routeMiddleware = [
        //...all the defaults...
        'jwt' => \App\Http\Middleware\CheckJWT::class, //<<<<------Added
    ];  

api.php

    Route::apiResource('weightrecords', ApiController::class);  

CheckJWT.php and auth.php same as in article..

1 Answers

What does $access_token look like?

Try using the post data without the escapes.
You may need to urlencode() the json. Typically not, but I have had it help with one API.

This is how I begin the trouble shooting process. Add these options.

CURLOPT_CONNECTTIMEOUT=>10,
CURLOPT_FAILONERROR=>true,
CURLINFO_HEADER_OUT=>true,

Get the curl_getinfo:

$response = curl_exec($curl);
$err = curl_error($curl);
$info = var_export(curl_getinfo($curl),true);
echo $info;

You should see the out going request header in $info because of the CURLINFO_HEADER_OUT=>true.

I have a PHP script where it returns details about the request including Body, $_POST, $_GET, $_REQUEST, $_SERVER

LINK to see your request details
You can use this link as your curl URL.

Related