我有一个程序,与YouTube直播API集成。它在计时器上运行,所以对我来说,每50分钟用刷新令牌获取一个新的访问令牌相对容易。我的问题是,为什么?
当我通过YouTube认证时,它给了我一个刷新令牌。然后,我大约每小时使用这个刷新令牌来获得一个新的访问令牌。如果我有刷新令牌,我总是可以使用它来获得一个新的访问令牌,因为它永远不会过期。因此,我不认为这比从一开始就给我一个访问令牌而不打扰整个刷新令牌系统更安全。
我有一个程序,与YouTube直播API集成。它在计时器上运行,所以对我来说,每50分钟用刷新令牌获取一个新的访问令牌相对容易。我的问题是,为什么?
当我通过YouTube认证时,它给了我一个刷新令牌。然后,我大约每小时使用这个刷新令牌来获得一个新的访问令牌。如果我有刷新令牌,我总是可以使用它来获得一个新的访问令牌,因为它永远不会过期。因此,我不认为这比从一开始就给我一个访问令牌而不打扰整个刷新令牌系统更安全。
当前回答
下面是OAuth 2.0文档中的信息。
刷新令牌用于在当前访问令牌失效或过期时获取新的访问令牌,或获取具有相同或更窄范围的其他访问令牌(访问令牌的生命周期可能比资源所有者授权的权限更短)。
+--------+ +---------------+
| |--(A)------- Authorization Grant --------->| |
| | | |
| |<-(B)----------- Access Token -------------| |
| | & Refresh Token | |
| | | |
| | +----------+ | |
| |--(C)---- Access Token ---->| | | |
| | | | | |
| |<-(D)- Protected Resource --| Resource | | Authorization |
| Client | | Server | | Server |
| |--(E)---- Access Token ---->| | | |
| | | | | |
| |<-(F)- Invalid Token Error -| | | |
| | +----------+ | |
| | | |
| |--(G)----------- Refresh Token ----------->| |
| | | |
| |<-(H)----------- Access Token -------------| |
+--------+ & Optional Refresh Token +---------------+
(A)客户端通过认证请求访问令牌 授权服务器和呈现授权授予。
(B)授权服务器对客户端进行身份验证和验证 授权授予,如果有效,则发出访问令牌 和一个刷新令牌。
(C)客户端向资源发出受保护资源请求 通过显示访问令牌来访问服务器。
(D)资源服务器验证访问令牌,如果有效, 为请求服务。
(E)步骤(C)和(D)重复直到访问令牌过期。如果 客户端知道访问令牌过期,则跳过步骤(G); 否则,它将发出另一个受保护资源请求。
(F)由于访问令牌无效,资源服务器返回 无效的令牌错误。
(G)客户端通过验证请求一个新的访问令牌 授权服务器和显示刷新令牌。的 客户端身份验证需求取决于客户端类型 以及授权服务器策略。
(H)授权服务器对客户端进行身份验证和验证 刷新令牌,如果有效,发出一个新的访问令牌(并且, 可选的,一个新的刷新令牌)。
其他回答
基本上,刷新令牌用于获取新的访问令牌。
为了清楚地区分这两个令牌并避免混淆,以下是OAuth 2.0授权框架中给出的它们的功能:
Access tokens are issued to third-party clients by an authorization server with the approval of the resource owner. The client uses the access token to access the protected resources hosted by the resource server. Refresh Tokens are credentials used to obtain access tokens. Refresh tokens are issued to the client by the authorization server and are used to obtain a new access token when the current access token becomes invalid or expires, or to obtain additional access tokens with identical or narrower scope.
现在,为了回答你的问题,为什么你仍然被发出一个刷新令牌,而不仅仅是保护一个访问令牌,互联网工程任务组在刷新令牌中提供的主要原因是:
出于安全原因,refresh_token只与授权服务器交换,而access_token则与资源服务器交换。这降低了在“一个访问令牌可以持续一小时,有一个刷新令牌可以持续一年或直到被撤销”和“一个访问令牌可以持续到被撤销而没有刷新令牌”之间存在的长期access_token泄漏的风险。
有关OAuth 2.0流程的更详细和完整的信息,请尝试阅读以下参考资料:
OAuth 2.0流程:服务器端web应用程序 IETF (Internet Engineering Task Force)发布的OAuth 2.0授权框架 为什么OAuth v2同时拥有访问和刷新令牌?
@Teyam提到SO帖子为什么OAuth v2同时拥有访问和刷新令牌?但我更喜欢另一个答案:https://stackoverflow.com/a/12885823/254109
DR refresh_token不会增加安全性。它的目的是提高可伸缩性和性能。然后,access_token可以存储在一些快速的临时存储中(如内存)。它还允许授权和资源服务器分离。
只使用访问令牌比同时使用访问令牌和刷新令牌风险大得多。
例如,您只使用访问令牌设置“100天”有效期,但一天,访问令牌被黑客窃取。现在,黑客有很大的机会自由使用访问令牌100天,作为一个坏的目的。
现在,您使用访问令牌集“60分钟”到期日期和刷新令牌集“100天”到期日期,但有一天,访问令牌被黑客窃取。现在,黑客自由使用访问令牌的机会要小得多,最多只能使用60分钟。
现在,您会认为刷新令牌是否被盗。实际上,如果刷新令牌被黑客窃取,黑客仍然有很大的机会免费使用刷新令牌,最多100天用于不良目的。但是,刷新令牌被盗的概率远低于访问令牌被盗的概率,因为刷新令牌每60分钟才使用一次来刷新访问令牌(以获得新的访问令牌),而访问令牌则在每次访问资源时使用,这要频繁得多。
因此,您最好同时使用访问令牌和刷新令牌。
access_token使用得更频繁,撤消的能力不是很重要,因为它们的生命周期很短。
refresh_token使用的频率较低,撤消的能力至关重要,因为它们可以用来生成新的access_token。
验证已签名令牌的成本较低,但撤销令牌很困难。
验证存储在数据库中的令牌的成本很高,但很容易撤销。
因此,签名密钥可以用作access_token来提高性能。
Db存储的键可以作为refresh_token使用,以便于撤销它们。
如果没有refresh_token,就很难找到一种提供低成本验证和简单撤销能力的机制。因此refresh_token的存在是由于性能原因。
下面是OAuth 2.0文档中的信息。
刷新令牌用于在当前访问令牌失效或过期时获取新的访问令牌,或获取具有相同或更窄范围的其他访问令牌(访问令牌的生命周期可能比资源所有者授权的权限更短)。
+--------+ +---------------+
| |--(A)------- Authorization Grant --------->| |
| | | |
| |<-(B)----------- Access Token -------------| |
| | & Refresh Token | |
| | | |
| | +----------+ | |
| |--(C)---- Access Token ---->| | | |
| | | | | |
| |<-(D)- Protected Resource --| Resource | | Authorization |
| Client | | Server | | Server |
| |--(E)---- Access Token ---->| | | |
| | | | | |
| |<-(F)- Invalid Token Error -| | | |
| | +----------+ | |
| | | |
| |--(G)----------- Refresh Token ----------->| |
| | | |
| |<-(H)----------- Access Token -------------| |
+--------+ & Optional Refresh Token +---------------+
(A)客户端通过认证请求访问令牌 授权服务器和呈现授权授予。
(B)授权服务器对客户端进行身份验证和验证 授权授予,如果有效,则发出访问令牌 和一个刷新令牌。
(C)客户端向资源发出受保护资源请求 通过显示访问令牌来访问服务器。
(D)资源服务器验证访问令牌,如果有效, 为请求服务。
(E)步骤(C)和(D)重复直到访问令牌过期。如果 客户端知道访问令牌过期,则跳过步骤(G); 否则,它将发出另一个受保护资源请求。
(F)由于访问令牌无效,资源服务器返回 无效的令牌错误。
(G)客户端通过验证请求一个新的访问令牌 授权服务器和显示刷新令牌。的 客户端身份验证需求取决于客户端类型 以及授权服务器策略。
(H)授权服务器对客户端进行身份验证和验证 刷新令牌,如果有效,发出一个新的访问令牌(并且, 可选的,一个新的刷新令牌)。