【问题标题】:Laravel passport - CreateFreshApiToken no laravel_token cookieLaravel 护照 - CreateFreshApiToken 没有 laravel_token cookie
【发布时间】:2018-01-03 13:11:43
【问题描述】:

CreateFreshApiToken,一旦添加到 Kernel.php 中的“web”中间件组,应该附加 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 的想法很受欢迎,尽管此时我'不确定我是否做得对。

【问题讨论】:

  • 用户需要登录一次,使用传统方式中间件创建cookie。
  • @Sandeesh 但是一旦我收到令牌会发生什么,我如何通过传递登录名/密码来授权用户?
  • 您不会在此方法中收到令牌。创建的 cookie 将包含加密令牌,护照令牌保护将使用该 cookie 来验证来自 cookie 的请求。因此,受auth:api 中间件保护的路由将获得身份验证,而无需手动附加任何访问令牌。因此,在初始登录后(应该是传统方式),您需要至少重新加载一次页面,以便CreateFreshApiToken 中间件创建 cookie。
  • 嗯,所以在 spa 的上下文中,我必须发送虚拟获取请求来接收令牌,或者调整 CreateFreshApiToken 以便在登录后立即获得它的回复?.. 我想我然后会坚持使用 oauth2 方式。谢谢 Sandeesh,请将消息复制粘贴到答案框中,这样我可以给你一些功劳。
  • @bruddah 我遇到了同样的问题。我有一个 SPA,我想使用 Cookie。 LocalStorage 不如 HttpOnly Secure Cookie 安全。从oauth/token 获取令牌非常简单。

标签: laravel laravel-5 laravel-passport


【解决方案1】:

按要求引用我的评论

"您不会在此方法中收到令牌。创建的 cookie 将包含加密令牌,并将被护照令牌保护用于验证带有 cookie 的请求。因此受auth:api 中间件保护的路由将无需手动附加任何访问令牌即可获得身份验证。因此,在初始登录后(这应该是传统方式),您需要至少重新加载一次页面,以便CreateFreshApiToken 中间件创建 cookie。"

除此之外,您还可以为您的 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

【讨论】:

  • 再次感谢。我同意,很难找到有关护照问题的信息。顺便说一句,您知道如何从 laravel 控制器获取已颁发给当前用户的 oauth2 访问令牌吗?问题是 - 我目前正在构建一个使用节点服务器将通知推送到客户端的应用程序,我需要以某种方式验证节点服务器的用户 - 决定 accessToken 是最简单的方法 - 1)将其传递给服务器并保存它作为套接字字段 2)在控制器中将带有 accessToken 的数据发布到节点服务器,套接字中的令牌将与来自 laravel 的一个数据进行比较。想法?
  • stormpath.com 页面已丢失所有内容。 esbenp.github.io 页面开始时信息量很大。但是由于作者使用的是他自己的框架并假设他的读者已经阅读并遵循了第 1-3 部分,所以他的代码示例并不是很有帮助。
猜你喜欢
  • 2020-02-11
  • 2019-06-15
  • 2019-04-06
  • 2017-07-27
  • 2019-12-21
  • 2017-05-18
  • 2021-11-01
  • 2019-08-02
  • 2021-08-31
相关资源
最近更新 更多