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']);
我正在使用带有 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']);