Pakage用于在GAE上运行的Go中validationGooglelogin令牌

我已经成功地从GAE上运行的Go上编写的Web服务器上从我的Android应用程序接收到Googlelogin令牌。 我不想用这个

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123 

因为它存在延迟问题和潜在的networking错误警告在谷歌login集成指导页面。 所以我find了使用Google API客户端库的方法,我发现这一点

 https://github.com/google/google-api-go-client/blob/master/GettingStarted.md 

我发现它比Java和Python Google API客户端库更复杂,我只需要调用GoogleIdTokenVerifier方法或verify_id_token函数来获取已loginAndroid应用程序的谷歌用户的信息。 我不知道我是否正确的方向。 请指导我如何validation从Android应用程序接收到的谷歌login令牌。

Related of "Pakage用于在GAE上运行的Go中validationGooglelogin令牌"

我最近也面临这个问题,并find了两个解决scheme。

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

  1. 它命中https://www.googleapis.com/oauth2/v2/certs获得rsa公钥数组。
  2. 解码标记。
  3. 使用来自解码令牌的“kid”(密钥ID)字段生成pem密钥以匹配RSA公钥。
  4. 使用pem密钥validation令牌的签名(位于jwt令牌中的第二个点之后)。

现在两个解决scheme

  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您可以validation观众(tokenInfo.Audience)和发布到(tokenInfo.IssuedTo)是有效的。 和其他参数,你想检查。 但是golang的官方图书馆并不遵循之前提到的stream程。 它出现www.googleapis.com/oauth2/v2/tokeninfo用于生成tokeninfo(不是www.googleapis.com/oauth2/v3/tokeninfo。v2没有提供像“name”这样的字段,但是包括您需要的电子邮件在内的每个字段validation令牌)。

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

你可以做什么来提高过程的效率是caching证书和Pem。 除非带有新的“孩子”的标志来临,否则不要点击url。

做基准并检查哪种方法更快。 有关延迟的事情可能是错误的,因为您正在使用networking获取证书。