我们决定使用OAuth2从Hazelcast共享会话切换到无状态JWT身份验证/授权,并发现了一个不适合我们下面描述的基础架构的问题。
因此,我们有多个可以通过直接链接访问的自包含系统(sc),即 mysite.com/scs1 和 mysite.com/scs2 。
每个scs都有自己的UI和BackEnd,但是“session”(通过无状态JWT授权实现)必须在多个scs中有效。
OAuth2 Authorizaion Server是专用服务器(UAA)。 在OAuth2术语中,每个scs都是资源服务器。
假设用户已登录 scs1 (通过UAA)并获得TTL = 10分钟的JWT和TTL = 30分钟的RefreshToken。然后他在浏览器中离开该标签15分钟。 JWT过期,但标签仍包含 scs1 的上一页。用户点击 mysite.com/scs3 后该页面上的链接。
scs3 收到请求,检查JWT并发现它已过期。但是我们有一个可以刷新JWT的RefreshToken(仍然存活15分钟)。
是否可以从 scs3 返回响应,要求浏览器转到UAA并静默刷新JWT?
也许某种REDIRECT / uaa /授权能够添加RefreshToken标题?
答案 0 :(得分:1)
我们终于找到了如何在我们的案例中处理令牌刷新。
JWT的TTL = 10分钟 RefreshToken的TTL = 30min
嵌入在我们网站的每个页面中的Javascript每8-9分钟刷新一次JWT。因此,当用户在浏览器中打开选项卡时,刷新过程将无缝进行。
角落案例是用户:
此时BackEnd仅接收已过期的JWT。 那么BackEnd会将用户重定向到专用的网页/尝试刷新吗? uri = mysite.com / scs1