关于AccessToken和RefreshToken的思考

为什么不给AccessToken设置较长时间的有效期

由于accessToken无状态,服务端无法主动失效,若accessToken泄露则攻击者在失效前可持续访问。

如果RefreshToken泄露呢?

RFC6749第10节中有说明,授权服务必须维护Refresh Token与客户端的绑定关系,也就是说只有合法用户的客户端(可通过IP,UA等资料判断)来请求是可以通过的。退一步讲,如果攻击者模拟了客户端可以执行刷新请求,那么就要看谁先刷。由于授权服务可以设置Refresh Token一次有效,因此不管哪个先刷新,另一个人刷新就会报错。如果用户先刷新,攻击者以Access Token和Refresh Token的双重失效结束游戏。如果攻击者先刷新了,合法用户就会收到报错信息,授权服务会引导用户从上图的步骤(A)重新开始认证,从而把有效的Refresh Token拿回到合法用户这里。

相关文档

Access Token & Refresh Token 详解以及使用原则