Angular 在何处存储jwt

Angular 在何处存储jwt,angular,jwt,bearer-token,Angular,Jwt,Bearer Token,我见过像twitter这样的网站,按照人们的建议,将身份验证令牌以http头的形式发送回他们的服务器,作为承载授权,但我找不到它们在浏览器中的实际存储位置。既不在cookies中,也不在本地存储中。有人能告诉我他们是怎么做的,或者至少应该遵循什么样的最佳实践。最流行的方式是在本地存储中存储令牌。你可以找到更详细的信息。请分享您的代码并向我们展示您尝试了什么。有不同的方法,但一般来说,如果您的JWT作为一种授权,您希望将其放在外部Java脚本够不到的地方,以保护JWT 这可以通过使用适用于您的域和

我见过像twitter这样的网站,按照人们的建议,将身份验证令牌以http头的形式发送回他们的服务器,作为承载授权,但我找不到它们在浏览器中的实际存储位置。既不在cookies中,也不在本地存储中。有人能告诉我他们是怎么做的,或者至少应该遵循什么样的最佳实践。

最流行的方式是在本地存储中存储令牌。你可以找到更详细的信息。请分享您的代码并向我们展示您尝试了什么。

有不同的方法,但一般来说,如果您的JWT作为一种授权,您希望将其放在外部Java脚本够不到的地方,以保护JWT

这可以通过使用适用于您的域和
httpOnly
的cookie来实现,以防止CSRF和XSS。此选项的附加值是在整个会话中保持,直到cookie最终过期。这样做的缺点是无法提取在UI上显示所需的数据。这个缺点可以通过使用一个授权端点来改变,该端点返回当前授权会话的用户数据


另一种选择是,如果需要访问前端jwt的某些内容,可以将其存储在内存中(这样,只有通过封装应用程序代码才能访问它),并作为经过身份验证的http请求中的标头发送。这里最大的缺点是jwt不会在页面重新加载时持久化。

如果站点易受XSS攻击,这可能会有问题,因为如果jwt存储在本地存储中,攻击者很容易破坏它。会话劫持是在考虑身份验证机制时需要考虑的问题。这种现象如此普遍的原因是因为它是一种非常简单的机制。问题是它扩大了你的站点攻击向量。下面是一篇相关的文章(尽管是在reactjs的上下文中),它应用了什么是授权会话?您是否读取发送到终结点的httponly cookie?授权会话意味着httponly cookie中的值与jwt,是。这将被视为“授权会话”。如果您已经通过身份验证,并且您的服务器设置了httpOnly cookie,那么您可以向端点发出后续请求,如GET
api/sessions/current
或其他更为RESTful的请求,这些请求将返回有关前端所依赖的用户的必要数据。确定,因此,这意味着每次页面刷新客户端都会向服务器发送请求,以获取登录状态和数据?如果数据不是私有信息,则可以将其存储在本地存储器中,这样就不必重新请求该数据。登录时,您可以设置httpOnly jwt并将用户数据作为响应传回。该用户数据可以存储在会话或本地存储器中,以在页面刷新期间保持不变。当您在后端执行授权CRUD操作时,httpOnly cookie将用作授权机制。这是在重新加载页面时发出请求的一个很好的理由。它只是存储在本地存储中的一种替代方法。我同意并会选择提供最高级别数据完整性的选项。