始终响应401(未授权)我的Laravel Passport生成的OAuth 2令牌

时间:2018-02-12 16:56:20

标签: laravel rest oauth-2.0 http-status-code-401 laravel-passport

我正在使用:

  • 用于REST检查的邮差/失眠
  • 使用Laravel Passport的Laravel 5.6
  • Vagrant(Apache 2,PHP 7.2)

制作了Laravel Docs for Laravel Passport上描述的所有清单,在完成某些步骤后,我会收到HTTP 401以获取有效的OAuth访问令牌。

  1. 使用client_id和client_secret以/ oauth / token /新访问令牌请求。
  2. 使用收到的访问令牌授权我的简单Laravel REST测试控制器,其中包含Oauth api中间件。
  3. 结局是一个:401未经授权:(
  4. 所以,这是我的一些配置:

    的Apache enter image description here

    api路线 enter image description here

    Kernel.php enter image description here

    PassportServiceProvider.php enter image description here

    AuthServiceProvider.php enter image description here

2 个答案:

答案 0 :(得分: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']; 

将访问令牌放入标题的承载中,它可以正常工作。 此外,您还可以使用$request->user();

获取当前用户

如果您使用client_credentials作为grant_type,它会通过客户端中间件,因此需要删除中间件auth:api

答案 1 :(得分:-1)