总是为我的 Laravel Passport 生成的 OAuth 2 令牌响应 401(未授权)
Posted
技术标签:
【中文标题】总是为我的 Laravel Passport 生成的 OAuth 2 令牌响应 401(未授权)【英文标题】:Always response 401 (Unauthorized) for my Laravel Passport generated OAuth 2 token 【发布时间】:2018-07-22 22:15:06 【问题描述】:我正在使用:
用于 REST 检查的 Postman/Insomnia 带有 Laravel Passport 的 Laravel 5.6 Vagrant (Apache 2, php 7.2)为 Laravel Passport 制作了 Laravel Docs 中描述的所有清单,在某些步骤之后,我收到了 HTTP 401 作为我的有效 OAuth 访问令牌。
-
由 /oauth/token/ 请求带有 client_id 和 client_secret 的新访问令牌。
使用收到的访问令牌来授权我的简单 Laravel REST 测试控制器和包含的 Oauth api 中间件。
结尾是一:401未授权:(
所以,这是我的一些配置:
阿帕奇
api 路由
内核.php
PassportServiceProvider.php
AuthServiceProvider.php
【问题讨论】:
为什么要分享屏幕截图?您可以在答案中添加代码。 @MASh 抱歉,我认为该屏幕截图比代码 sn-p 更直观,便于理解。 那你在错误的宇宙中。 【参考方案1】:我也有类似的问题:
您的代码和我的代码之间的区别:
在routes/api.php
中,我只使用了auth:api
。
我没有在 app 文件夹中创建 PassportServiceProvider.php
。
在Kernel.php
我的是client
而不是client_credentials
。
我在 POST 请求调用中将 client_credentials
用作 grant_type
。
结果我总是得到 401。
直到我使用密码授予客户端创建用户:
php artisan passport:client --password
并在 POST 请求调用中将 client_credentials
更改为 password
:
$http = new GuzzleHttp\Client;
$response = $http->post('http://your-app.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'username' => 'taylor@laravel.com',
'password' => 'my-password',
'scope' => '',
],
]);
$access_token = json_decode((string) $response->getBody(), true)['access_token'];
将返回的访问令牌放入 headers 的 Bearer 中,它就可以工作了。
你也可以使用$request->user();
获取当前用户
如果你使用client_credentials
作为grant_type
,是通过客户端中间件,所以中间件中的auth:api
需要去掉。
【讨论】:
【参考方案2】:这是因为默认情况下 Apache 不会将授权标头传递给 PHP。您需要编辑您的 Apache 站点配置以在 Deskpro 的指令中添加一行。注意这个配置必须直接添加到Apache的配置中(例如,添加到htaccess中是行不通的
<VirtualHost>
# ...
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
# ...
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 Read this. 这是一个很好的答案,对我有帮助。一切都在实时服务器上运行,它在我的本地系统上不起作用。因此,这只能归因于开发环境。这应该包含在 Laravel 文档中。 见laravel.com/docs/8.x/authentication #A Note On FastCGI以上是关于总是为我的 Laravel Passport 生成的 OAuth 2 令牌响应 401(未授权)的主要内容,如果未能解决你的问题,请参考以下文章
不断收到 401 未经授权的“无效凭据”Laravel Passport
Laravel OAuth2 Passport API,生成令牌但无法发出请求:“未经身份验证”