为什么OAuth v2同时有访问令牌和刷新令牌?

830

OAuth 2.0协议草案的第4.2节指出,授权服务器可以返回一个access_token(用于认证资源),以及一个refresh_token,后者仅用于创建新的access_token

https://www.rfc-editor.org/rfc/rfc6749#section-4.2

为什么需要两个令牌?为什么不让access_token的有效期与refresh_token相同,而不提供refresh_token呢?

21个回答

0
我对任何排名靠前的答案都不满意,所以我会加入自己的观点。
访问令牌是用来传递的。传递给一个或多个后端(例如StackOverflow),然后它们可能将其转发给其他服务等(因为微服务很流行),如果其中任何一个粗心大意地记录或公开了您的令牌,或者是有恶意的 - 那就麻烦了。因此,您使访问令牌的生命周期短暂,以限制影响范围。
但是,您还有一个单独的(生命周期较长)令牌,只发送给您已经信任的单个服务 - 同一个服务,最初为您发放访问令牌的服务(比如Google,或者您用来登录StackOverflow的任何其他服务)。您使用该令牌获取新的短期访问令牌,再次传递给您信任程度较低的第三方。
这意味着,如果您自己的设备、应用程序或者您本人受到威胁,刷新令牌就毫无意义(对于任何其他身份验证机制也是如此)。但是,如果StackOverflow受到威胁,只有您的短期访问令牌会被曝光,因为StackOverflow无法看到您的长期刷新令牌。关于每个令牌使用频率的整个争论充其量是一个误导。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接