为了账号安全,请及时绑定邮箱和手机立即绑定

用于在 GAE 上运行的 Go 中验证 Google 登录令牌的包

用于在 GAE 上运行的 Go 中验证 Google 登录令牌的包

Go
慕运维8079593 2022-01-04 15:54:27
我已经成功地从我的 Android 应用程序收到了谷歌登录令牌,我的网络服务器上用 Go 编写,在 GAE 上运行。我不想使用https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123因为它在谷歌登录集成指导页面上警告了延迟和潜在网络错误的问题。所以我正在寻找使用 Google API Client Library for Go 的方法,我发现了这个https://github.com/google/google-api-go-client/blob/master/GettingStarted.md我发现它比 Java 和 Python Google API 客户端库更复杂,我只需要调用 GoogleIdTokenVerifier 方法或 verify_id_token 函数来获取已登录 Android 应用程序的谷歌用户的信息。我不确定我是否会朝着正确的方向前进。请指导我如何验证从 Android 应用程序收到的谷歌登录令牌。
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

我最近也遇到了这个问题,并找到了两个解决方案。

但在此之前,您需要了解 python(或其他推荐的客户端库)的库是做什么的。

  1. 它点击https://www.googleapis.com/oauth2/v2/certs以获取 rsa 公钥数组。

  2. 解码令牌。

  3. 使用解码令牌中的“kid”(密钥 ID)字段生成 pem 密钥以匹配 RSA 公钥。

  4. 使用 pem 密钥验证令牌的签名(在 jwt 令牌中的第二个点之后)。

现在有两种解决方案:

  1. 使用官方 oauth 库“google.golang.org/api/oauth2/v2”

func getTokenInfo(idToken string) (*oauth2.Tokeninfo, error) {

oauth2Service, err := oauth2.New(&http.Client{})

if err != nil {

    return nil, err

}

tokenInfoCall := oauth2Service.Tokeninfo()

tokenInfoCall.IdToken(idToken)

return tokenInfoCall.Do()

}

从 Tokeninfo 您可以验证受众 (tokenInfo.Audience) 和颁发给 (tokenInfo.IssuedTo) 是否有效。以及您要检查的其他参数。但是golang的官方库并没有按照我之前提到的流程进行。它点击 www.googleapis.com/oauth2/v2/tokeninfo 以生成令牌信息(不是 www.googleapis.com/oauth2/v3/tokeninfo。v2 没有提供诸如“名称”之类的字段,但包括您需要的电子邮件在内的每个字段以验证令牌。)。


使用GoogleIdTokenVerifier库,它是 python 库的一个端口。


您可以做些什么来提高流程效率,那就是缓存证书和 pem。除非带有新“孩子”的令牌出现,否则不要点击网址。


做基准测试并检查哪种方法更快。当您使用网络获取证书时,有关延迟的事情可能是错误的。


查看完整回答
反对 回复 2022-01-04
  • 1 回答
  • 0 关注
  • 266 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信