Android端用Credential Manager获取Google Id Token如何避免请求用户个人信息?
解决方法
- 核心是调整OAuth 2.0请求的Scope,移除
profile和email,仅保留openid。默认的Google登录请求会包含这两个额外Scope,才会触发用户信息共享的弹窗。 - 构建
GetGoogleIdTokenOption时,明确指定仅使用openidScope,同时按需配置其他参数:
val googleIdTokenOption = GetGoogleIdTokenOption.Builder() .setServerClientId(YOUR_GOOGLE_CLIENT_ID) .setFilterByAuthorizedAccounts(false) // 根据需求设置是否过滤已授权账户 .setScopes(listOf("openid")) // 仅保留openid scope .build() val getCredentialRequest = GetCredentialRequest.Builder() .addCredentialOption(googleIdTokenOption) .build() CredentialManager.create(context).getCredential(getCredentialRequest, context, null) .addOnSuccessListener { credential -> val idTokenCredential = credential as GoogleIdTokenCredential val idToken = idTokenCredential.idToken // 解析idToken中的sub字段,该字段是用户的唯一永久标识,用于判断登录用户一致性 }
补充说明
- 仅使用
openidScope时,Google返回的ID Token仅包含核心标识字段(如sub、iss、aud),不会携带姓名、头像、邮箱等个人信息,因此弹窗不会再询问用户共享这类内容。 sub字段对同一个Google用户是全局唯一且永久不变的,完全满足你判断后续登录是否为同一用户的需求。
内容的提问来源于stack exchange,提问作者Montaner
相关产品推荐
相关产品推荐

