OAuth 2.0 协议草案的第 4.2 节表明,授权服务器可以返回一个access_token(用于对资源进行身份验证)和一个refresh_token,它纯粹用于创建一个新的access_token:
access_token
refresh_token
https://www.rfc-editor.org/rfc/rfc6749#section-4.2
为什么两者都有?为什么不只做access_token最后一个只要 therefresh_token并且没有 a refresh_token?
刷新令牌的想法是,如果访问令牌被泄露,因为它是短暂的,攻击者有一个有限的窗口来滥用它。
刷新令牌,如果被泄露,将毫无用处,因为攻击者除了刷新令牌之外还需要客户端 ID 和密码才能获得访问令牌。
话虽如此 ,因为对授权服务器和资源服务器的每次调用都是通过 SSL 完成的——包括当他们请求访问/刷新令牌时的原始客户端 id 和秘密——我不确定访问令牌是怎样的。比长期刷新令牌和客户端ID/秘密组合更容易妥协”。
这当然与您不控制授权和资源服务器的实现不同。
这是一个讨论刷新令牌使用的好帖子:OAuth Archives。
上面的引用,谈论刷新令牌的安全目的:
刷新令牌…减轻长期 access_token 泄漏的风险(在不安全的资源服务器上的日志文件中查询参数、测试版或编码不佳的资源服务器应用程序、将 access_token 放在非 https 站点上的 JS SDK 客户端饼干等)