猿问

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

我已经成功地从我的 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 应用程序收到的谷歌登录令牌。


慕运维8079593
浏览 270回答 1
1回答

ABOUTYOU

我最近也遇到了这个问题,并找到了两个解决方案。但在此之前,您需要了解 python(或其他推荐的客户端库)的库是做什么的。它点击https://www.googleapis.com/oauth2/v2/certs以获取 rsa 公钥数组。解码令牌。使用解码令牌中的“kid”(密钥 ID)字段生成 pem 密钥以匹配 RSA 公钥。使用 pem 密钥验证令牌的签名(在 jwt 令牌中的第二个点之后)。现在有两种解决方案:使用官方 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。除非带有新“孩子”的令牌出现,否则不要点击网址。做基准测试并检查哪种方法更快。当您使用网络获取证书时,有关延迟的事情可能是错误的。
随时随地看视频慕课网APP

相关分类

Go
我要回答