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

如何通过Google API获取idToken以用于client.verifyIdToken?

获取Google ID Token的几种常用方法

根据你的使用场景,获取ID Token的方式有所不同,下面是几种主流场景的实现方式:

1. 前端浏览器环境(基于Google Identity Services)

如果请求来自前端网页,可通过Google官方身份服务库直接获取用户的ID Token:

  • 加载Google Identity Services脚本:
    <script src="https://accounts.google.com/gsi/client" async defer></script>
    
  • 初始化客户端并获取ID Token:
    window.onload = function () {
      google.accounts.id.initialize({
        client_id: 'YOUR_GOOGLE_CLIENT_ID',
        callback: handleCredentialResponse
      });
      google.accounts.id.renderButton(
        document.getElementById("g_id_signin"),
        { theme: "outline", size: "large" }
      );
    };
    
    function handleCredentialResponse(response) {
      // response.credential即为所需的ID Token
      const idToken = response.credential;
      // 将token发送到你的Cloud Functions进行验证
      fetch('/your-cloud-function-endpoint', {
        method: 'POST',
        body: JSON.stringify({ idToken: idToken })
      });
    }
    

2. 后端服务(使用服务账号模拟用户)

如果需要在后端服务中获取特定用户的ID Token(比如批量操作或服务间调用),可通过Google Auth Library实现:
以Node.js为例:

  • 先安装依赖:
    npm install google-auth-library
    
  • 编写代码获取ID Token:
    const { GoogleAuth } = require('google-auth-library');
    
    async function getIdToken() {
      const auth = new GoogleAuth({
        keyFile: 'path/to/your/service-account-key.json',
        scopes: ['https://www.googleapis.com/auth/cloud-platform']
      });
      const client = await auth.getClient();
      // 替换为目标API的受众(audience)地址
      const idToken = await client.fetchIdToken('https://your-cloud-function-audience');
      return idToken;
    }
    

3. 移动端应用(Android/iOS)

Android

使用Google Sign-In SDK获取ID Token:

// 初始化GoogleSignInOptions
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
    .requestIdToken("YOUR_GOOGLE_CLIENT_ID")
    .requestEmail()
    .build()

val googleSignInClient = GoogleSignIn.getClient(this, gso)

// 发起登录请求
startActivityForResult(googleSignInClient.signInIntent, RC_SIGN_IN)

// 在onActivityResult中获取ID Token
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == RC_SIGN_IN) {
        val task = GoogleSignIn.getSignedInAccountFromIntent(data)
        val account = task.getResult(ApiException::class.java)
        val idToken = account.idToken // 此处即为ID Token
    }
}

iOS

使用Google Sign-In SDK获取ID Token:

GIDSignIn.sharedInstance.signIn(withPresenting: self) { signInResult, error in
    guard let result = signInResult else { return }
    let user = result.user
    if let idToken = user.idToken?.tokenString {
        // 使用获取到的ID Token
    }
}

注意事项

  • 确保你的Google Cloud项目已启用对应API(比如Identity Toolkit API、Google Sign-In API)
  • ID Token有效期通常为1小时,过期后需重新获取
  • 在Cloud Functions中调用client.verifyIdToken时,要传入正确的audience参数(即你的Google Client ID)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:32:40