使用Google做身份认证时如何通过JWT Token获取用户角色
解决方法
首先明确:公共Google账号体系本身不支持第三方开发者给普通Google用户添加自定义属性并注入到Google原生签发的OIDC Token中,需要根据你的使用场景选择对应方案:
场景1:仅对你公司内部的Google Workspace员工开放登录
你可以直接通过Google Admin后台配置自定义角色字段,直接从Google返回的Token中获取角色:
- 登录Google Admin管理后台,进入「目录」-「用户」-「管理自定义属性」,创建一个用于存储用户角色的自定义字段,支持设置为单值或多值数组格式。
- 回到用户管理页,给对应员工账号分配对应的角色值,比如
admin、editor、viewer。 - 在你的Google Cloud项目的OAuth同意屏幕配置中,添加该自定义属性对应的专属scope,将该scope加入到你的应用OIDC授权请求的scope列表中。
- 后续用户完成认证后,你可以直接从返回的ID Token中拿到角色对应的自定义claim,也可以调用Google UserInfo接口获取该字段。
场景2:面向所有公共Google用户开放登录
这种场景下你无法修改Google原生返回的Token内容,需要在你自己的应用侧做角色映射:
- 第一次用户完成Google登录后,提取Google返回的ID Token中的
sub字段,这个是Google用户的唯一永久标识,将该字段和你为用户分配的角色信息绑定存储在你自己的应用数据库中。 - 权限校验有两种实现方式:
- 你可以自己签发应用专属的JWT Token,将用户角色作为自定义claim写入到该Token中,后续应用所有接口校验都使用你自己签发的JWT,Google原生Token仅用于首次登录校验身份。
- 每次请求携带Google原生Token,你先校验Token的合法性,提取
sub字段后查询你的数据库拿到对应用户的角色,再做权限判断。
注意事项
- 如果你选择自行签发JWT,签名算法推荐使用
RS256非对称加密算法,避免密钥泄露导致的伪造Token风险。 - 不要依赖Google Access Token做业务权限校验,Access Token仅用于调用Google开放接口,本身有效期很短。
内容的提问来源于stack exchange,提问作者Buddhika Priyabhashana
相关产品推荐
相关产品推荐

