Laravel Паспорт Refre sh Хранение токенов - PullRequest
0 голосов
/ 25 марта 2020

Я использую Passport токены для предоставления пароля с интерфейсом Svelte. Я могу просто создавать токены и получать к ним доступ, а также использовать токены refre sh. Моя проблема - безопасное хранение токенов refre sh. В идеале Laravel просто вернет жетон refre sh в качестве повара ie, а затем примет этого повара ie на маршруте /oauth/token.

Я мог бы даже создать повара ie на стороне клиента, но все равно придется выяснить, как заставить Laravel разобрать его. Я предполагаю, что не существует простого способа заставить laravel отправить повара ie или принять повара ie маркера refre sh?

Если нет, то как мне хранить refre sh токен? В настоящее время просто хранит его в читаемом кулинаре ie, но это делает его плохим для атак. Хотелось бы, чтобы что-то обновлялось, значит, повар ie. Любой совет был бы великолепен!

1 Ответ

0 голосов
/ 26 марта 2020

После большой лапши я нашел решение. С помощью двух промежуточных программ я присоединяю повара ie и читаю повара ie:

Прикрепить повара ie Промежуточное ПО:

public function handle($request, Closure $next)
{
    $response = $next($request);
    if (request()->is("oauth/token")) {
        $json = json_decode($response->getContent(), false);
        $token = $json->refresh_token;
        if ($token) {
            return ($response)->cookie('refresh_token', $token, 15);
        }}
return $response;}

Считываем повара ie Промежуточное ПО:

 public function handle($request, Closure $next)
{
    if (request()->is("oauth/token")) {
        if ($request->hasCookie('refresh_token')) {
            $token = $request->cookie('refresh_token');
            $request->request->add(['refresh_token' => $token]);
        }}
    return $next($request);}

Если у вас есть идеи по оптимизации, особенно бит json декодирования в промежуточном программном обеспечении Attach Cook ie, это было бы здорово!

Потребовалось некоторое время, чтобы узнать, как просто применить это промежуточное программное обеспечение к паспортным маршрутам (поскольку они не учитываются в сети). Оказывается, вы можете просто создать свою собственную группу и передать ее в маршруты Passport в вашем AuthServiceProvider:

   Passport::routes(null, ['middleware' => 'passport']);
...