我在Auth0工作,并参与了刷新令牌功能的设计。
这完全取决于应用程序的类型,这是我们推荐的方法。
网络应用
一个好的模式是在令牌过期之前刷新令牌。
将令牌到期时间设置为一周,并在用户每次打开Web应用程序时以及每小时一小时刷新令牌。如果用户超过一个星期没有打开应用程序,则他们将不得不再次登录,这是可以接受的Web应用程序UX。
要刷新令牌,您的API需要一个新的终结点,该终结点将接收有效的,未到期的JWT,并返回带有新到期字段的相同签名的JWT。然后,Web应用程序会将令牌存储在某处。
移动/本机应用
大多数本机应用程序只登录一次。
这个想法是,刷新令牌永远不会过期,并且可以始终将其交换为有效的JWT。
永不过期的令牌的问题在于, 永不
意味着永不。如果手机丢了怎么办?因此,它需要以某种方式由用户识别,并且应用程序需要提供一种撤消访问的方法。我们决定使用设备的名称,例如“ maryo’s
iPad”。然后,用户可以转到该应用程序并撤消对“ maryo的iPad”的访问权限。
另一种方法是在特定事件上撤销刷新令牌。一个有趣的事件是更改密码。
我们认为JWT在这些用例中没有用,因此我们使用随机生成的字符串并将其存储在自己的一边。



