【发布时间】:2014-12-10 05:30:54
【问题描述】:
这是我上一个问题的后续:How do I access Google Drive Application Data from a remote server?
我有一个应用程序需要同时访问客户端(在线,JavaScript)和服务器端(离线,Python)的 Google Drive AppFolder。我的应用程序是独一无二的,因为客户端和服务器可能无法通过原始身份验证进行通信。
因此,我使用以下内容为服务器(启动的客户端)获取身份验证令牌:
gapi.auth.authorize({
'client_id': CLIENT_ID,
'scope': SCOPES,
'access_type': 'offline',
'response_type': 'code',
'state': 'my_state',
}, null, 2),
'redirect_uri': 'http://server/oauth2callback',
'immediate': false
},
handleOfflineAuthResult);
服务器存储凭据,包括刷新令牌。
然后客户端(在后续用户会话中)直接向 Google Drive 发送请求以获取令牌:
gapi.auth.authorize({
'client_id': CLIENT_ID,
'scope': SCOPES,
'immediate': true
}, handleAuthResult);
现在当客户端这样做时它会获得一个刷新令牌,但会使服务器的 refresh_token 无效。因此,我的服务器无法再刷新其令牌并获得“AccessTokenRefreshError: invalid_grant”。
假设客户端和服务器无法通过原始身份验证进行通信,是否有任何方法可以解决此问题(即客户端不能只向服务器询问其 auth_token,这是设计使然)?
我想到的唯一“解决方案”是让客户端将其 auth_token 和 refresh_token 存储在 AppFolder 中,服务器不断拉取 AppFolder 以获取新凭据,随后用客户端替换其副本。
【问题讨论】:
-
两者的客户端 ID 是否相同?每个 Client_id / 用户组合最多可以有 30 个刷新令牌。
标签: google-oauth google-drive-api