我正在学习Laravel护照包,并使用Vue.js创建一个SPA进行测试,我想知道是否将Token保存在客户端浏览器中。如果将其保存在本地存储中,则可以通过Javascript和任何在浏览器上运行js的人都可以阅读它! 我的问题是;对于这种情况有什么解决方案? 如果我将令牌保存在cookie中,那么它也可以访问,并且阅读了有关httpOnly cookie的信息,那么如果Javascript无法访问cookie,那么如何设置cookie来从API响应中保存令牌? 是否可以通过API保存Cookie?
希望我能为我的问题找到答案。
答案 0 :(得分:1)
嗯,这里有几件事要理解。
首先,服务器使用 set-cookie 标头设置HTTP cookie。在这种情况下,您作为开发人员无需执行任何操作。浏览器将自动为您设置它,并将在每个Ajax或非Ajax请求上发送回服务器。只要它没有过期,它将发送cookie。
使用LocalStorage存储令牌时,任何JavaScript代码都可以读取令牌(如果滥用,则称为XSS攻击)。 但是,这里要理解的关键是其他域的JavaScript代码无法读取LocalStorage 。范围仅限于您自己的站点。其他网站的JS无法读取。因此,如果您没有使用任何外部依赖项或受损的CDN,那么您会很安全。
不。在任何情况下都无法设置跨域Cookie。只有其他域的服务器可以为其自身设置cookie(除非您具有后端机制,例如Gmail + Youtube来共享会话)。但是,在子域的情况下,允许以下操作:
example.com
可以为*.example.com
设置cookie。xyz.example.com
可以为example.com
设置cookie。当然,规则要复杂得多。 This article应该可以帮助您进一步理解。