我已经成功地从我的网络服务器上的Android应用程序中收到了Google登录令牌,该服务器是在GAE上运行的Go中编写的。
我不想这样做https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123
因为它存在关于延迟的问题以及在Google登录集成指导页面上发出警告的潜在网络错误。所以我找到了使用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应用上登录的Google用户的信息。我不确定我是否朝着正确的方向前进。请指导我如何验证从Android应用收到的Google登录令牌。
答案 0 :(得分:10)
我最近也面临这个问题并找到了两个解决方案。
但在此之前,您需要了解python(或其他推荐的客户端库)的库。
现在有两个解决方案:
使用官方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没有提供像" name"这样的字段,但每个字段都包含验证令牌所需的电子邮件。)。
使用GoogleIdTokenVerifier库,它是python库的一个端口。
为提高流程效率,您可以做的是缓存证书和pem。除非有新的"孩子"来了,不要打网址。
做基准并检查哪种方法更快。关于延迟的事情可能是错误的,因为您正在使用网络来获取证书。