关于 cookie、JWT 和 Web 应用程序
Posted
技术标签:
【中文标题】关于 cookie、JWT 和 Web 应用程序【英文标题】:on cookies, JWT and web application 【发布时间】:2021-01-19 15:53:37 【问题描述】:我正在开发一个使用 Angular 9 作为前端从 Django API 获取数据的网络应用程序。 身份验证方案基于 JSON Web Token。在登录过程中,Angular 向 API 发送用户名-密码对。如果该数据正确,API 会使用一对 JSON Web 令牌进行响应:一个用于访问,另一个用于刷新。如果没有有效的访问令牌,API 将不允许您获取其数据。
我担心将这些令牌存储在客户端的什么位置。
在网络上搜索,我发现记忆令牌的首选方法之一是 cookies,实际上这是我迄今为止实现的方式。但是有几篇文章说,为了对 XSRF 攻击提供一定程度的安全性,应该使用 httpOnly 标志设置 cookie。没关系,但是使用 JWT 进行身份验证的优势之一是可以将用户定义的 声明 附加到令牌的有效负载中。例如,我正在考虑将用户权限添加为令牌声明,以允许或拒绝对客户端界面的给定部分的访问。但是如果token设置为httpOnly,就没有办法访问payload了,不是吗?
此外,我想了解一下 Cookie 在 Web 应用程序中的工作原理。据我所知,服务器应该使用Set-Cookie
标头设置cookie。但在我的应用程序中,cookie 是由 javascript 代码设置的,利用了在客户端浏览器中运行的 ngx-cookie-service 库。鉴于没有服务器知道它们,这些 cookie 被发送到哪里?它们是否随着每个请求附加到为 Angular 框架提供支持的 node Web 服务器?例如,每次我向localhost:4200/home/students
发出请求时,cookie 中存储的令牌都会随之发送?在每个请求上都有旅行令牌不是安全风险吗?
【问题讨论】:
【参考方案1】:我个人将我的令牌存储在浏览器本地存储中,是的,JWT 令牌与每个请求一起发送,如果您使用 http,这可能会导致问题,但如果您使用 https,请求数据将被加密并且没有人可以拦截你的令牌。 关于如何在 Angular 应用程序中存储令牌的更多说明,您可以参考此视频:link
【讨论】:
谢谢。但是使用本地存储,任何浏览器选项卡以及任何 javascript 代码都可以访问令牌,对吧? 浏览器的本地存储是按域和每个端口隔离的,请查看***.com/questions/4201239/…以上是关于关于 cookie、JWT 和 Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Go实战--golang中使用JWT(JSON Web Token)
AspNetCore 2:用于 Web 的 OpenIdConnect Cookie,用于 API 的 JWT Bearer。可能吗?