如何从客户端接收的Google ID Token中提取邮箱地址?
如何从Google ID Token中提取邮箱地址
你的问题出在请求ID Token时没有包含获取邮箱的权限范围(Scope),默认生成的ID Token不会返回邮箱字段,必须显式请求email scope才能让Google在Token中注入该信息。
解决步骤:
修改Credential请求,添加
emailScope
在构建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)从返回的Token中提取邮箱
当请求包含emailscope后,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
相关产品推荐
相关产品推荐

