我在Auth0工作,我参与了刷新令牌功能的设计。
这一切都取决于应用程序的类型,这里是我们推荐的方法。
Web应用程序
一个好的模式是在令牌过期之前刷新令牌。
将令牌过期设置为一周,并在每次用户打开Web应用程序和每一小时刷新令牌。如果用户打开应用程序超过一周,他们将必须再次登录,这是可接受的Web应用程序UX。
要刷新令牌,您的API需要一个新的端点,该端点接收有效的未过期的JWT,并返回带有新到期字段的相同的签名JWT。然后Web应用程序将令牌存储在某个地方。
移动/本地应用程序
大多数本机应用程序只做一次登录一次。
想法是刷新令牌永不过期,它可以被交换总是一个有效的JWT。
从不过期的令牌的问题是永远不会永远不会。如果你失去了手机,你该怎么办?因此,它需要由用户以某种方式可识别,并且应用需要提供一种撤销访问的方式。我们决定使用设备的名称,例如“maryo的iPad”。然后,用户可以去应用程序并撤销对“maryo的iPad”的访问。
另一种方法是在特定事件上撤销刷新令牌。一个有趣的事件是更改密码。
我们认为JWT对这些用例没有用,所以我们使用一个随机生成的字符串,我们将它存储在我们这边。