Laravel Passport 刷新令牌存储

Laravel Passport Refresh Token Storage

我正在使用带有 Svelte 前端的 Passport password grant tokens。我可以很好地创建和访问令牌,也可以使用刷新令牌。我的问题是安全地存储刷新令牌。理想情况下 Laravel 只是 return 刷新令牌作为 cookie,然后在 /oauth/token 路由上接受该 cookie。

我什至可以创建 cookie 客户端,但仍然需要弄清楚如何让 Laravel 解析它。我猜想没有简单的方法让 laravel 发送 cookie,或接受刷新令牌的 cookie?

如果没有,我应该如何存储刷新令牌?目前只是将它存储在一个可读的 cookie 中,但这对攻击不利。想要持续刷新的东西,因此是 cookie。任何建议都会很棒!

经过多方摸索,我找到了解决办法。使用两个中间件,我附加了一个 cookie 并读取了 cookie:

附加 Cookie 中间件:

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;}

读取 Cookie 中间件:

 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);}

如果您对优化有任何想法,尤其是 Attach Cookie 中间件中的解码 json 位,那就太好了!

找出如何将这些中间件应用到 Passport Routes 也花了一段时间(因为它们在 web 中不算)。事实证明,您可以创建自己的组,并将其传递到您的 AuthServiceProvider 中的 Passport 路由中:

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