双 Token 方案是一种常见的安全策略,用于解决长时间保留 Token 导致的安全问题。该方案同时优化了用户体验,并能储存失败请求并在刷新 accessToken 后重新请求这部分接口。
双 Token 方案在登录后获取短期的 accessToken 和长期的 refreshToken,accessToken 有效期短,refreshToken 有效期长,在 accessToken 过期后,通过 refreshToken 获取新的 accessToken。
accessToken 的短期有效性,即使被盗用,攻击者的非法访问受到时间限制,因为其在有效期结束后会自动失效。
refreshToken 的长期有效性,需要在客户端安全储存,但即使 refreshToken 被窃取,攻击者无法直接访问敏感信息,因为 refreshToken 不可直接用于资源访问。
refreshToken 的长效性允许用户在较长时间内保持登录状态,从而显著改善了用户体验。
当accessToken过期时,客户端请求受保护资源会得到未授权响应。此时,使用refreshToken向认证服务器请求新的accessToken,认证服务器验证refreshToken有效后,发放新的accessToken给客户端并重置其有效期。如果refreshToken也过期或被撤销,客户端需重新登录以获取新的refreshToken。
当accessToken过期且客户端尝试访问受保护资源时,将获得未授权响应。客户端可保存该请求,包括相关信息和参数。刷新accessToken后,客户端重新发送之前保存的失败请求,此次请求将获得授权。这确保用户在重新登录后不会受之前请求失败的影响,同时保障受保护资源的安全性。
(1) 在传输 accessToken 和 refreshToken 时,务必使用安全的方式(如 HTTPS),以避免拦截或劫持。
(2) 为防止恶意应用程序或攻击者获取,必须安全地储存这些令牌。