如何判断用户集成的Google账号是Google Workspace(Gsuite)还是普通账号?
Google Workspace(原G Suite)账号校验方案
方案1:解析OAuth ID Token的hd声明(优先推荐,无额外API调用)
这是成本最低的校验方式,无需额外申请权限或发起接口请求:
- 申请OAuth授权时只要包含
openid或emailscope,授权成功后获取到的ID Token会自带官方声明字段 - Workspace账号的ID Token会包含
hd(Hosted Domain)字段,值为用户所属Workspace的托管域名(例:yourorg.com) - 普通个人Google账号的ID Token不存在
hd字段,直接判断该字段是否存在即可区分账号类型 - 若需限制仅指定组织的Workspace账号接入,直接判断
hd的值是否等于你的组织域名即可
示例代码(Node.js Google Auth Library场景):
const { OAuth2Client } = require('google-auth-library'); const client = new OAuth2Client(CLIENT_ID); async function verifyWorkspaceAccount(token) { const ticket = await client.verifyIdToken({ idToken: token, audience: CLIENT_ID, }); const payload = ticket.getPayload(); // 校验是否为Workspace账号 const isWorkspace = !!payload.hd; // 若需限制仅指定组织,额外校验 payload.hd === 'yourorg.com' return isWorkspace; }
注意:ID Token必须先通过Google官方校验逻辑验证签名、签发方、过期时间等有效性,避免伪造请求绕过校验。
方案2:调用Admin SDK Directory API校验(适合需获取更多组织信息的场景)
如果需要额外校验用户在组织内的角色、权限等信息,可以用该方案:
- 申请
https://www.googleapis.com/auth/admin.directory.user.readonly权限,该权限需要Workspace管理员授权 - 调用
GET https://www.googleapis.com/admin/directory/v1/users/{userEmail}接口 - 普通个人账号调用该接口会返回404/403错误,Workspace账号会返回包含
customerId、组织信息等完整的用户实体,可据此判断账号类型
内容的提问来源于stack exchange,提问作者Srichand Malladi
相关产品推荐
相关产品推荐

