如何刷新google plus bearer token(javascript)?

时间:2014-04-24 17:30:36

标签: oauth-2.0 google-api google-oauth google-plus-one google-api-js-client

我在单页(javascript)应用程序中使用Google HTML登录按钮,以获取具有Google登录功能的用户的授权对象。这在此详述:https://developers.google.com/+/web/signin/add-button

我成功收到了如下所示的令牌。由于此令牌在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"

}

2 个答案:

答案 0 :(得分:2)

使用客户端流程(即Java脚本),您只能获得短期(约1小时)access_token。如果您希望能够刷新它,则需要refresh_token,只能使用服务器端流程获取。{/ p>

您可以找到更多信息here

基本上,它的工作原理如下:

  1. 用户连接到您的网站并点击“登录按钮”
  2. 您在JavaScript中收到access_tokencode
  3. 您将此code发送到Web服务器上的PHP脚本
  4. 该脚本向Google服务器发出请求,并与您的code进行交换 access_token(应该与您刚刚在JavaScript中收到的相同)和refresh_token
  5. 您需要将此refresh_token存储在某处(在数据库中) 例如)因为它只会发布一次(当用户授予时) 许可)
  6. 当您的某个access_token即将过期时,您可以使用您的 refresh_token获取另一个有效的access_token

答案 1 :(得分:0)

除了设置计时器之外,您还应该在进行API调用之前检查您的令牌是否仍然有效。既然客户端库返回了promises,并且promises是可链接的,那么你可以非常优雅地完成它。

请参阅我的要点here