【问题标题】:Httponly cookie as bearer token - Laravel PassportHttponly cookie 作为不记名令牌 - Laravel Passport
【发布时间】:2018-04-23 17:41:48
【问题描述】:

我已经开始使用 React JS 和 Laravel 5.5 构建应用程序。我已经安装了 Laravel Passport 并成功地在我的 React JS 应用程序中登录和注销了我的用户——但有人告诉我为了安全目的考虑使用 httponly cookie。

在我的工作代码中,我只是将访问令牌存储在 localStorage 中,并使用 axios 标头中的Authorization': 'Bearer ' + token 将其发送到 api,这非常有效。但是,当我使用 httponly 设置 cookie 时,我无法获取它的值(我认为这正是重点!) - 使用 react-cookie(来自 npm),如果我将 cookie.loadAll() 记录到控制台,那么唯一我看到的 cookie 是一个新的 XSRF-TOKEN cookie,但不是我设置的 accessToken cookie。那么如何将这个令牌发送到 api 呢?

【问题讨论】:

    标签: laravel oauth axios laravel-passport


    【解决方案1】:

    由于无法从 JS 中读取 httpOnly cookie,所以在从后端获取新令牌时,后端必须在响应正文中发送令牌。

    【讨论】:

      【解决方案2】:

      Httponly cookie 作为不记名令牌没有多大意义。拥有 cookie httponly 有助于保护您和用户免受 XSS 攻击,因为它们无法被 javascript 读取。它们可以用于例如用于存储会话信息并在用户执行时发送,例如页面重新加载。

      将授权标头设置为'Bearer ' + token 是如何将令牌发送到 api 的正确方法。在 api 服务器上使用令牌之前,您应该始终检查令牌是否仍然有效。

      【讨论】:

        【解决方案3】:

        浏览器会话 cookie 使用和承载令牌是不同的身份验证策略(基于 cookie 和基于令牌)。

        在我看来,它们不应该混在一起。

        Lavavel 护照支持使用不记名令牌或开箱即用 cookie 进行身份验证(请参阅TokenGuard user 的条件) 为此,您必须使用 Passport::cookie。

        在这种情况下,您将能够设置 cookie 并使用 HttpOnly 标志和其他属性来保护它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-15
          • 2019-03-24
          • 2019-02-14
          • 2017-01-10
          • 1970-01-01
          • 2019-08-30
          • 2017-09-24
          • 2019-04-07
          相关资源
          最近更新 更多