我做了一些关于OAuth和OpenId连接的坚实研究。但我仍然不完全确定什么以及如何保护每一个令牌。让我们暂时搁置刷新令牌,重点讨论ID令牌和访问令牌。从安全的角度来看,两者必须被同等对待。它们不能泄漏公共信息,因此只能与HTTPS一起使用,并避免在客户端使用不受保护的读取/使用的存储。由此,我假设我只能使用httpOnly cookie (XSS、CRFS保护、库泄漏)来存储一个简单网站(服务器端是JWT的发行者)的令牌。是否可以在cookie中存储访问令牌(直接或包装在ID令牌中作为声明)(我不考虑令牌与会话id的大小),还是应该将其存储在服务器端,因此在简单网站的情况下使用经典的会话解决方案?对于SPA <-> API (<-> API.)我应该/必须使用Bearer令牌解决方案吗?
我想我理解得很对,但我想确定一下。
谢谢
发布于 2021-05-12 13:11:10
如果要直接从前端应用程序中使用访问令牌,通过对app进行一些AJAX调用,则不能将访问令牌保存在httpOnly cookie中。您的脚本将需要访问它。如果您有一个页面应用程序,则可以将这些令牌保存在内存中。只要用户不刷新页面,令牌就可以使用。刷新后,您可以执行无声登录,从后端获取新的令牌。
如果您有一个简单的网站,并且不直接从前端执行对API的任何调用,我将坚持使用普通的旧会话。在这种情况下,在会话中使用访问令牌不会带来任何额外的价值。
在SPA <-> API (<-> API.)的情况下我应该/必须使用Bearer令牌解决方案吗?
不知道你在问什么。如果您的意思是在SPA和API之间通信时,您必须在授权头中使用访问令牌,而不是发送cookie,那么是的。如果您询问是否要使用承载令牌,则不存在所谓的发送方受限令牌,这意味着访问令牌被绑定到它被分发到的客户端。
发布于 2021-05-12 08:10:34
理想情况下,您应该将令牌存储在后端,并且可能在客户机和后端之间使用一个简单的会话cookie。
默认情况下,某些服务(如ASP.NET核心)将将令牌存储为cookie。为了保护cookie,在将其发送到浏览器之前,他们将对其进行加密。因此,这意味着,即使cookie被偷,它也不能被解密,因此令牌是安全的。
是的,cookie大小将非常大,但是ASP.NET核心通过将大cookie分解成4KB的块来解决这个问题。如果您使用HTTP/2及其标头压缩,那么大型cookie不会影响传输时间。
https://stackoverflow.com/questions/67499151
复制相似问题