我正在尝试使用客户端凭据授予令牌进行机器对机器的身份验证。我有两个单独的网站(API和Web)。
我已经在API上创建了客户端凭据授予客户端。
php artisan passport:client --client
在网络上,我正在尝试使用以下代码从API检索令牌。 PASSWORD_ID / PASSWORD_SECRET存储在我的.env文件中,我直接从数据库中复制了它们,因此它们绝对正确。
$guzzle = new GuzzleHttp();
$response = $guzzle->get('http://testsite-api.test/oauth/token', [
'form_params' => [
'grant_type' => 'client_credentials',
'client_id' => env('PASSPORT_ID'),
'client_secret' => env('PASSPORT_SECRET'),
],
]);
由此我得到以下错误:
客户端错误:
POST http://testsite-api.test/oauth/token
导致401 Unauthorized
响应:{“错误”:“ invalid_client”,“ error_description”:“客户端身份验证失败”,“消息”:“客户端身份验证失败”}
请注意:我将此代码拖到Mac(使用代客)上,并立即生效。
我已经使用邮递员对其进行了测试,并且首次使用Web中使用的ID / SECRET进行了测试。
有什么想法我要去哪里吗?我可以肯定这是一个宅基地问题,但是我很难找到解决方法。
答案 0 :(得分:6)
问题可能与使用env()
函数有关。如果配置是用php artisan config:cache
缓存的,则env()
函数总是返回null
,您可以通过运行php artisan config:clear
并尝试再次发送请求来进行测试,它应该可以正常工作。
还应该重构应用,env()
仅应用于config/
文件中,这样就可以缓存变量,并且在应用中只需使用config('app.PASSPORT_SECRET')
,{{1 }}是配置所在的文件名。