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

如何从客户端接收的Google ID Token中提取邮箱地址?

如何从Google ID Token中提取邮箱地址

你的问题出在请求ID Token时没有包含获取邮箱的权限范围(Scope),默认生成的ID Token不会返回邮箱字段,必须显式请求email scope才能让Google在Token中注入该信息。

解决步骤:

  1. 修改Credential请求,添加email Scope
    在构建GetCredentialRequest时,需要指定包含email的权限范围,示例代码如下:

    // 构建请求时添加email和profile scope
    val request = GetCredentialRequest.Builder()
        .addCredentialOption(
            GoogleIdTokenCredentialOption.Builder()
                .setFilterByAuthorizedAccounts(false)
                .setServerClientId("你的服务器客户端ID") // 替换为实际项目的客户端ID
                .setScopes(listOf("email", "profile"))
                .build()
        )
        .build()
    
    // 发起请求(通过CredentialManager调用)
    val result = credentialManager.getCredential(context, request)
    
  2. 从返回的Token中提取邮箱
    当请求包含email scope后,ID Token的Payload会新增email和email_verified字段,你可以直接通过解析后的Token对象获取:

    suspend fun handleSignIn(result: GetCredentialResponse) {
        val credential = result.credential
        val googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credential.data)
        
        // 直接获取解析后的Payload字段
        val email = googleIdTokenCredential.parsedIdToken?.payload?.email
        val isEmailVerified = googleIdTokenCredential.parsedIdToken?.payload?.emailVerified
    }
    

额外注意事项:

  • 需确保在Google Cloud控制台的OAuth同意屏幕配置中,已将email和profile添加到已授权的范围列表中。
  • 如果需要服务器端验证ID Token,服务器侧也需支持对应scope的权限校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:09:54