我正在使用带有Svelte前端的Passport password grant tokens。我可以很好地创建和访问令牌,也可以使用刷新令牌。我的问题是安全存储刷新令牌。理想情况下,Laravel只需将刷新令牌作为cookie返回,然后在/oauth/token
路由上接受该cookie。
我什至可以创建cookie客户端,但是仍然必须弄清楚如何使Laravel对其进行解析。我想没有一种简单的方法可以使laravel发送cookie或接受刷新令牌的cookie?
如果没有,我应该如何存储刷新令牌?当前仅将其存储在可读的cookie中,但这使其对攻击不利。希望某些东西能够持续刷新,因此会产生Cookie。任何建议都会很棒!
答案 0 :(得分:0)
经过大量的整理,我找到了解决方案。我使用两个中间件附加一个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']);