如何在API认证中只允许Bearer令牌



使用$this->时;中间件("auth:auth"(用户令牌可以作为查询字符串、请求负载或承载令牌传递:https://laravel.com/docs/5.8/api-authentication#passing-请求中的令牌

我想只允许通过承载令牌进行身份验证。这意味着我不想允许通过查询字符串或发布请求进行身份验证。

我试图通过添加一个中间件来解决这个问题,该中间件只删除了api_token

public function handle($request, Closure $next)
{
$request->request->set('api_token', null);
return $next($request);
}

但无论我做什么

Route::group(['middleware' => ['auth:api', 'remove-api-token'],

Route::group(['middleware' => ['remove-api-token', 'auth:api'],

将始终首先触发CCD_ 1。所以我的方法不起作用。

你知道如何拒绝仅针对auth:api的GET/POST身份验证吗?

一个选项是扩展现有的tokenGuard并覆盖getTokenForRequest((方法以仅接受承载令牌:

创建一个新的卫士:

"app\Services\Auth\BearerTokenGuard.php">

<?php
namespace AppServicesAuth;
use IlluminateAuthTokenGuard;
class BearerTokenGuard extends TokenGuard
{
/**
* Get the token for the current request.
*
* @return string
*/
public function getTokenForRequest()
{
return $this->request->bearerToken();
}
}

在服务提供商中定义您的新卫士:

"app\Providers\AuthServiceProvider.php">

use AppServicesAuthBearerTokenGuard;
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
Auth::extend('bearerToken', function ($app, $name, array $config) {
return new BearerTokenGuard(Auth::createUserProvider($config['provider']), $app['request']);
});
}

将您的新防护驱动程序添加到防护配置:

"config\auth.php">

'guards' => [
'api' => [
'driver' => 'bearerToken',
'provider' => 'users',
'hash' => false,
],
],

我还没有对此进行测试,但它应该可以工作,尽管它可能需要一些修改。

最新更新