#php #laravel #authentication #jwt
Вопрос:
Я внедрил пакет Laravel JWT, jwt-auth версии 1.0.2 в свой проект Laravel 8, который действует как API.
В моем интерфейсе Nuxt JS используется модуль аутентификации Nuxt и поставщик JWT Laravel.
Я сохранил большую часть конфигурации прежней, но изменил JWT_TTL
ее, чтобы она составляла 2 минуты для тестирования.
В примере AuthController, настроенном для пакета проверки подлинности JWT, refresh
метод обновляет маркер, который, очевидно, делает недействительным предыдущий маркер, однако в настоящее время эта функция находится за auth
промежуточным ПО, и промежуточное ПО проверки подлинности необходимо, чтобы проверить, вошел ли кто-то в систему.
Проблема, с которой я столкнулся в настоящее время, заключается в том, что, как только мой access_token
срок действия истекает и мой интерфейс запрашивает новый токен, старый токен автоматически предоставляется в качестве Authorisation
заголовка, но refresh
конечная точка возвращает ошибку 401, не прошедшую проверку подлинности.
Если я добавлю refresh
в список исключенных промежуточное программное обеспечение auth, оно будет работать по назначению, но я чувствую, что это сопряжено с риском для безопасности?
Может быть, я упускаю что-то очевидное?
AccountController.php
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesHash;
use IlluminateSupportFacadesValidator;
use IlluminateHttpRequest;
use AppModelsUser;
use AppModelsUserSetting;
use CarbonCarbon;
class AccountController extends Controller
{
/**
* Instantiate a new DomainsController instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth:api', [
'except' => ['store', 'login', 'refresh']
]);
}
/**
* Store a newly created resource in storage. (create account)
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
// ...
}
/**
* Log in
*
* @return IlluminateHttpResponse
*/
public function login(Request $request)
{
// ...
}
/**
* Refresh a token.
*
* @return IlluminateHttpJsonResponse
*/
public function refresh()
{
return $this->respondWithToken(auth()->refresh());
}
}
Controller.php
<?php
namespace AppHttpControllers;
use IlluminateFoundationAuthAccessAuthorizesRequests;
use IlluminateFoundationBusDispatchesJobs;
use IlluminateFoundationValidationValidatesRequests;
use IlluminateRoutingController as BaseController;
use IlluminateSupportFacadesAuth;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
/**
* Get the token array structure.
*
* @param string $token
*
* @return IlluminateHttpJsonResponse
*/
protected function respondWithToken($token)
{
return response()->json([
'access_token' => $token,
'token_type' => 'Bearer',
'expires_in' => auth()->factory()->getTTL() * 60
]);
}
}
Maybe I can retain the refresh
exclusion for this middleware and then add some custom logic to my refresh method?