如何使用OAuth2静默刷新过期的JWT令牌?

时间:2017-08-31 21:38:12

标签: authentication oauth-2.0 jwt microservices refresh-token

我们决定使用OAuth2从Hazelcast共享会话切换到无状态JWT身份验证/授权,并发现了一个不适合我们下面描述的基础架构的问题。

Current Hazelcast shared session

因此,我们有多个可以通过直接链接访问的自包含系统(sc),即 mysite.com/scs1 mysite.com/scs2

Stateless JWT so called Session

每个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?

JWT has expired

也许某种REDIRECT / uaa /授权能够添加RefreshToken标题?

1 个答案:

答案 0 :(得分:1)

我们终于找到了如何在我们的案例中处理令牌刷新。

JWT的TTL = 10分钟 RefreshToken的TTL = 30min

嵌入在我们网站的每个页面中的Javascript每8-9分钟刷新一次JWT。因此,当用户在浏览器中打开选项卡时,刷新过程将无缝进行。

角落案例是用户:

  1. 打开标签mysite.com/scs1
  2. 登录
  3. 关闭标签
  4. 等待15分钟。 JWT到期,RefreshToken还活着。
  5. 打开新标签页并输入mysite.com/scs1或scs2等。
  6. 此时BackEnd仅接收已过期的JWT。 那么BackEnd会将用户重定向到专用的网页/尝试刷新吗? uri = mysite.com / scs1

    1. try-refresh页面仅包含试图刷新令牌的javascript,并且在成功的情况下将用户从 uri 参数重定向回地址