Laravel护照 - CreateFreshApiToken没有laravel_token cookie

时间:2017-07-27 17:05:43

标签: laravel laravel-5 laravel-passport

CreateFreshApiToken,一旦添加到' web' Kernel.php中的中间件组,应该将laravel_token cookie附加到通过Web中间件发出的每个请求的响应中,不是吗?例如,该组中的任何内容都应该接收cookie:

Route::group(['middleware' => ['web']], function () {
    Route::get('/{vue?}', function () { return view('index'); } )->where('vue', '[\/\w\.-]*');
});

我试图替换使用client_secret的当前工作流程,看到oauth2和网站在同一个域中,在CreateFreshApiToken的帮助下自我消费api的想法有一个很好的响铃,尽管在这我不确定我是否做得对。

1 个答案:

答案 0 :(得分:7)

按要求引用我的评论

"您将不会在此方法中收到令牌。创建的cookie将包含加密的令牌,并且护照令牌防护将使用它来验证cookie随附的请求。因此,auth:api中间件保护的路由将在不手动附加任何访问令牌的情况下进行身份验证。因此,在初始登录(应该是传统方式)之后,您需要至少重新加载一次页面,以便cookie由CreateFreshApiToken中间件创建。"

除此之外,您还可以使用SPA的密码授予。您可以在网上看到90%的教程。但是它们将客户端ID和秘密存储在JavaScript文件中,从安全角度来看这是非常糟糕的做法。为了克服这个问题,您可以创建一个代理路由/中间件,它注入客户端ID和密码。因此,您只需传递电子邮件和密码即可获取访问令牌和刷新令牌。

但是,您还需要将访问令牌和刷新令牌存储在浏览器的本地存储中,这正是开发人员通常所做的事情。但令牌变得容易受到XSS攻击。因此,在使用SPA身份验证时,从安全角度考虑有很多角度。

要克服上述所有问题,您需要将令牌安全地存储在HttpOnly cookie中,然后使用中间件解析Cookie中的令牌,并在任何API请求中对用户进行身份验证。这是使用SPA进行身份验证的最实用,最安全的方法。 Laravel Passport就是这样做的,但需要一些初步的工作与自定义登录路由才能实现。缺少适当的文档和清晰的使用和工作是Passport的问题。

以下是一些有关这些的好资源 https://web.archive.org/web/20141208132104/http://alexbilbie.com/2014/11/oauth-and-javascript/

http://esbenp.github.io/2017/03/19/modern-rest-api-laravel-part-4/

https://stormpath.com/blog/token-auth-spa