使用Auth 0 PHP/Curl的问题

huus2vyu  于 2022-11-13  发布在  PHP
关注(0)|答案(1)|浏览(156)

我正在尝试使用Auth0来保护Laravel Framework 8.83.22上的API
我正在使用本教程(机器对机器)https://auth0.com/blog/build-and-secure-laravel-api/
问题:
命令行中的Curl可以正常工作:

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

然而,在PHP脚本中调用超时(我尝试过更长的超时,但没有任何帮助)。我得到的令牌很好(下面的第1节),但第2节超时(cURL错误#:操作在30000毫秒后超时,接收到0个字节)。

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

    }

.环境

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

检查JWT.php和auth.php与文章中的相同。

ogsagwnx

ogsagwnx1#

$access_token是什么样子的?
请尝试使用不带转义符的post数据。
你可能需要urlencode()这个json。通常不需要,但是我已经用它来帮助一个API了。
这是我开始故障排除过程的方式。添加这些选项。

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

获取curl_getinfo:

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

由于CURLINFO_HEADER_OUT=>true,您应该在$info中看到传出的请求标头。
我有一个PHP脚本,它返回有关请求的详细信息,包括Body、$_POST、$_GET、$_REQUEST、$_SERVER
LINK to see your request details
您可以使用此链接作为您的curl URL。

相关问题