oauth2.0 通常是否可以在资源服务器上缓存访问令牌(短时间),即使它可能过期?

slmsl1lt  于 2023-05-21  发布在  其他
关注(0)|答案(1)|浏览(112)

通常是否可以在资源服务器上缓存访问令牌,即使它可能过期?不涉及其他资源服务器,令牌仅用于本地操作(在服务器上),例如数据库持久性。
我必须缓存访问令牌至少5分钟(根据我的IP)。同时,它的有效期只有30分钟。如果用户刚好在访问令牌到期之前转到后端(例如在分钟29:59中),无效令牌被高速缓存并且可能被使用另外5分钟。对我来说没关系,因为只有几分钟,我只需要用户上下文。但从技术Angular 来看,这有问题吗?
IP:OAuth 2.0
前端:Angular应用程序将访问令牌发送到后端
后端:.Net Core解决方案,使用令牌自检来验证令牌并获取用户上下文

km0tfn4u

km0tfn4u1#

检查和结果缓存

使用内省时,标准做法是缓存内省结果,以避免在每个API请求时调用授权服务器。
内省通常与引用令牌一起使用,引用令牌不像JWT那样可读,并且不会向互联网客户端透露任何敏感数据。通常API网关可以进行自检并维护该高速缓存。
大多数缓存支持每个项目的生存时间。应将其设置为不超过自检响应的exp声明的值。然后,针对访问令牌的散列(例如SHA256)存储自检结果。
Angular应用程序应该在每个API请求上发送令牌。如果Angular应用程序没有发送一个其哈希值与该高速缓存中的哈希值匹配的令牌,或者如果内省失败,则调用将被拒绝并返回401错误。

** JWT 回复**

一个更完整的安全选项,如果支持的话,是让网关使用不同的接受头进行内省,以接收JWT响应。然后可以将JWT访问令牌转发到API。然后,API在每个请求上验证JWT。JWT Response Mode规范中描述了内省差异。
这种方法确保了对每个请求的安全验证,特别是在微服务将访问令牌转发给彼此的用例中。然后,每个API中的JWT验证有助于防止网络内部的恶意请求。

过期

当访问令牌过期,或者由于其他原因(例如令牌已被撤销)而无法进行自检时,应该从API返回401错误。Angular客户端必须尝试刷新令牌并重试API请求。如果失败,客户端应重定向用户以重新进行身份验证。

相关问题