You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Identity Token过期后延长用户会话至8小时?

Google Identity Services (GSI) 会话续期与Refresh Token问题解答

现状说明

已基于GSI实现Google登录,前端代码如下:

<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <script src="https://accounts.google.com/gsi/client" async defer></script>
        <div id="g_id_onload"
            data-client_id="myclientid"
            data-login_uri="mysiteurl"
            data-auto_select="true">
        </div>
        <div class="g_id_signin"
            data-type="filled_blue"
            data-size="large"
            data-theme="outline"
            data-text="sign_in_with"
            data-shape="pill"
            data-logo_alignment="left">
        </div>
    </body>
</html>

云函数中验证ID Token的Go代码片段:

import "google.golang.org/api/idtoken"

func ListItems(w http.ResponseWriter, r *http.Request) {
    var googleClientId = os.Getenv("GOOGLE_CLIENTID")
    r.ParseForm()                
    token := r.Form.Get("credential") 
    payload, err := idtoken.Validate(context.Background(), token, googleClientId)
    // 后续验证逻辑...
}

问题1:如何延长会话至8小时,无需用户重新认证

Google的ID Token有效期固定为1小时,无法直接修改时长。要实现8小时会话,需要引入自定义应用会话层,步骤如下:

  • 首次验证:用户登录后,后端验证Google ID Token通过,生成自己的会话令牌(比如自定义JWT),设置有效期为8小时,通过HttpOnly、Secure的Cookie返回给前端。
  • 后续请求:客户端调用云函数时,携带这个自定义会话令牌(而非Google的credential)。
  • 令牌续期:在每次请求时检查自定义令牌的剩余有效期,若剩余时间不足(比如小于1小时),则自动生成新的会话令牌并更新前端Cookie,实现无感知续期。

问题2:GSI是否生成Refresh Token?如何获取

当前使用的GSI HTML按钮默认流程不会返回Refresh Token,这是因为该流程属于隐式授权模式的简化版,仅返回短期ID Token和Access Token(若指定了scope)。要获取Refresh Token,需切换到授权码流程:

  1. 前端调整:使用GSI的JS API发起授权请求,必须指定access_type=offline和prompt=consent参数,确保Google返回授权码。
  2. 前端将授权码发送到后端云函数。
  3. 后端用授权码、客户端ID、客户端密钥(Web应用需妥善保管密钥)向Google令牌端点请求,交换得到ID Token、Access Token和Refresh Token。
  4. 后端加密存储Refresh Token,后续可通过它向Google请求新的ID Token,无需用户重新登录。

内容的提问来源于stack exchange,提问作者Tom Scheifler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 11:42:24