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

仅使用openid scope时,如何从Google Identity Services的JWT中排除邮箱?

问题分析与解决方案

核心误解澄清

仅指定openid scope时,Google的ID Token仍可能包含用户邮箱——这是Google OpenID Connect实现的默认行为,邮箱属于Google用户的基础标识字段,即使未显式请求email scope,只要用户完成认证,Google通常会将其包含在ID Token中。

关键问题排查与修复

  1. 明确指定请求的Scope
    你的代码中未设置scope参数,Google One Tap默认会请求openid email profile组合scope,这可能是你拿到邮箱的直接原因。需要在初始化时显式指定仅openid:
window.google.accounts.id.initialize({
  client_id: "MY_CLIENT_ID.apps.googleusercontent.com",
  callback: handleCredentialResponse,
  scope: "openid" // 新增此行,强制仅请求openid scope
});
  1. 验证OAuth同意屏幕配置
    进入Google Cloud Console的「OAuth同意屏幕」页面,确认:
  • 「已授权的范围」中仅保留openid,删除email、profile等其他scope
  • 配置保存后等待5-10分钟生效(Google的配置同步存在延迟)

额外说明

如果严格执行上述配置后,ID Token仍包含邮箱字段,这属于Google OpenID实现的特性——Google会默认返回部分基础用户标识信息(包括邮箱),无法通过scope完全移除。此时你只需在后端处理ID Token时忽略email和email_verified字段即可,完全不影响仅基于sub(用户唯一标识)的认证逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:50:21