我试图使用客户端凭据授予令牌进行机器对机器的身份验证。我有两个独立的站点(API和Web)。
我在API上创建了一个客户端凭据授予客户端。
php artisan passport:client --client
在Web上,我试图使用下面的代码从API中检索令牌。密码_ID/密码_ .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”:“invalid_client”,“error_description”:“客户身份验证失败”,“消息”:“客户身份验证失败”}
请注意:我把这段代码拉到了我的Mac上(它使用的是贴现器),它马上就起作用了。
我用过邮递员来测试它,它第一次工作了,使用了Web中使用的相同的ID/秘密。
知道我哪里出问题了吗?我很确定这是个宅基地问题,但我很难找到解决办法。
发布于 2020-06-14 20:09:15
问题可能与使用env()
函数有关。如果配置是用php artisan config:cache
缓存的-- env()
函数总是返回null
,那么您可以通过运行php artisan config:clear
并再次发送请求来测试它是否正常工作。
此外,您还应该重构应用程序,env()
只应该在config/
文件中使用,这样您就可以缓存变量,而在应用程序中只需使用config('app.PASSPORT_SECRET')
,配置文件的名称就是app
。
https://stackoverflow.com/questions/62345782
复制相似问题