Laravel:Client_Credentials不起作用

时间:2018-06-28 09:25:12

标签: php laravel oauth-2.0

在我的Laravel网站中,我必须做一个cron作业,该作业将检索一些数据,然后更新我的数据库。 从Laravel的文档中,我想到了Laravel Passport的机器对机器身份验证。

所以我跳进了这个,安装等等。 https://laravel.com/docs/5.6/passport#client-credentials-grant-tokens

我遵循了文档中的每个步骤,并且从我在互联网上找到的示例中,我总是收到以下消息

{
    "message": "Unauthenticated."
}

我在Kernel.php中添加了client_credentials中间件

protected $routeMiddleware = [
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    ...
    'authAdmin' => \App\Http\Middleware\AuthAdmin::class,
    'client' => \Laravel\Passport\Http\Middleware\CheckClientCredentials::class,
];

然后作为基础知识,我创建了一个ApiTestController,其中包含将为我的路线触发的测试方法。

我将以下行放入api.php路由中:

/*
  Public API Routes
*/
Route::group(['prefix' => 'v1'], function() {
  ... 
  Route::get('/test', 'ApiTestController@test')->middleware('client');
});

基本上我的方法只是返回“有效”。

我已经通过passport:client工匠命令创建了一个护照客户端,然后通过邮递员使用它来获取我的Bearer令牌。

但是它不起作用:(

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

我知道这个回复很晚,但是我在Passport 5.7中也遇到了同样的问题。

要解决此问题,我必须将以下代码添加到.htaccess中。这是因为我在邮递员中使用https而不是http进行测试,但是http会返回未经身份验证的信息。

添加代码后,您应该能够使用邮递员中的http网址测试您的http api。

也许可以帮助某人。

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]