OAuth 2.0滑动令牌过期场景下AccessToken与RefreshToken有效期的关联
基础概念澄清
- AccessToken(访问令牌):短期有效令牌,用于直接访问受保护资源,过期后无法使用,必须通过RefreshToken获取新的AccessToken。
- RefreshToken(刷新令牌):长期有效令牌,唯一作用是在AccessToken过期后,无需用户重新输入凭证即可获取新的AccessToken,自身也有有效期限制。
针对三种矛盾观点的权威拆解
观点:AccessToken15分钟、RefreshToken2小时,用户无需重新输入凭证即可使用应用2小时
此表述在标准OAuth 2.0逻辑下是正确的。只要RefreshToken的2小时有效期未过,无论AccessToken是否过期,都可以用RefreshToken刷新获取新的AccessToken,用户无需重新登录。从首次获取令牌的时间点算起,最长可无登录使用应用2小时。观点:仅当应用闲置时长不超过15分钟时才能实现无登录使用
此表述混淆了应用自身会话逻辑与OAuth 2.0令牌机制。OAuth令牌的有效性和应用是否闲置无关,只要RefreshToken未过期,哪怕AccessToken已过期,也能自动刷新获取新令牌。所谓“闲置15分钟失效”通常是应用自身设置的会话超时逻辑,并非OAuth规范要求。观点:只要闲置时长小于15分钟,用户就能无限期使用应用
此表述错误。RefreshToken本身有固定有效期(示例中为2小时),即使每次在AccessToken过期前刷新获取新令牌,若授权服务器未采用滚动刷新RefreshToken有效期的自定义逻辑,RefreshToken到期后仍需用户重新登录。滚动刷新RefreshToken是服务商的可选实现,并非OAuth 2.0强制规范。
官方参考依据
OAuth 2.0核心规范为RFC 6749,其中明确了RefreshToken的角色与过期规则:RefreshToken的有效期由授权服务器自主决定,其核心作用是获取新的AccessToken,但并未强制要求在刷新AccessToken时延长RefreshToken的有效期。不同服务商的具体实现可能存在差异,需以各自官方文档为准,但核心逻辑均遵循RFC 6749。
内容的提问来源于stack exchange,提问作者ahmed.zubaca

