Oauth 2.0 如何刷新google plus承载令牌(javascript)?
我在我的单页(javascript)应用程序中使用google HTML登录按钮从使用google登录的用户那里获取授权对象。这在此处详细说明: 我成功地收到一个令牌,如下所示。由于该令牌将在1小时后过期,因此我需要每隔30分钟左右刷新一次令牌,直到用户选择注销。我试图通过以下方式实现这一点:Oauth 2.0 如何刷新google plus承载令牌(javascript)?,oauth-2.0,google-api,google-oauth,google-plus-one,google-api-js-client,Oauth 2.0,Google Api,Google Oauth,Google Plus One,Google Api Js Client,我在我的单页(javascript)应用程序中使用google HTML登录按钮从使用google登录的用户那里获取授权对象。这在此处详细说明: 我成功地收到一个令牌,如下所示。由于该令牌将在1小时后过期,因此我需要每隔30分钟左右刷新一次令牌,直到用户选择注销。我试图通过以下方式实现这一点: gapi.auth.authorize({client_id: "90... ...92.apps.googleusercontent.com", scope: "profile email", imme
gapi.auth.authorize({client_id: "90... ...92.apps.googleusercontent.com", scope: "profile email", immediate: true}, function() { console.log( arguments ); } );
但是没有运气。我将收到相同的令牌,直到它过期,然后返回空(未登录)令牌。如何保存/刷新承载令牌,而用户不必继续再次登录
{
_aa: "1"
access_token: "ya29.1.AA... ...BByHpg"
authuser: "0"
client_id: "90... ...92.apps.googleusercontent.com"
code: "4/Nyj-4sVVcekiDnIgMFh14U7-QdRm.svPMQSODiXMbYKs_1NgQtmX9F90miwI"
cookie_policy: "single_host_origin",
expires_at: "1398341363",
expires_in: "3600",
g_user_cookie_policy: undefined,
id_token: "eyJhbGciOiJ... ...0Es1LI"
issued_at: "1398337763",
num_sessions: "2",
prompt: "none",
response_type: "code token id_token gsession",
scope: "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email",
session_state: "b92d67080... ...73ae",
state: "",
status: {
google_logged_in: true,
method: "AUTO",
signed_in: true
},
token_type: "Bearer"
}
使用客户端流(ie Java脚本),您只能接收短期(~1小时)
访问\u令牌
。如果您希望能够刷新它,则需要一个refresh\u令牌
,该令牌只能通过服务器端流获得
你可以找到更多的信息
基本上,它是这样工作的:
access\u令牌和code
code
发送到web服务器上的PHP脚本代码
交换为
access\u-token
(应该与您刚刚在JavaScript中收到的相同)和refresh\u-token
refresh\u令牌
存储在某个地方(在数据库中,用于
示例)因为它只会发布一次(当用户授权时)
(许可证)访问\u令牌之一即将过期时,您可以使用
刷新\u令牌
以获取另一个有效的访问\u令牌
除了设置计时器,您还应该在进行API调用之前检查您的令牌是否仍然有效。既然客户端库返回承诺,并且承诺是可链接的,那么您就可以非常优雅地完成它了
见我的要点。这也是我的结论。我现在已经切换到使用以下(在客户端)gapi.auth.authorize({client_id:“asdfasdf”,scope:“profile email”,response_type:“token gsession”,immediate:asImmediate,authuser:gapiUser},callback);