Oauth 2.0 如何刷新google plus承载令牌(javascript)?

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

我在我的单页(javascript)应用程序中使用google HTML登录按钮从使用google登录的用户那里获取授权对象。这在此处详细说明:

我成功地收到一个令牌,如下所示。由于该令牌将在1小时后过期,因此我需要每隔30分钟左右刷新一次令牌,直到用户选择注销。我试图通过以下方式实现这一点:

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令牌
,该令牌只能通过服务器端流获得

你可以找到更多的信息

基本上,它是这样工作的:

  • 用户连接到您的网站并单击“登录按钮”
  • 您将收到JavaScript中的
    access\u令牌和
    code
  • 将此
    code
    发送到web服务器上的PHP脚本
  • 该脚本向Google服务器发出请求,并将您的
    代码
    交换为
    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);