https://www.googleapis.com/oauth2/v3/certs中v1,v2和v3之间的差异

时间:2015-07-07 19:42:12

标签: android node.js google-oauth google-signin

我尝试通过Google Sign-in在Android上对用户进行身份验证以获取帐户名称,通过GoogleAuthUtil.getToken(getApplicationContext(),app,scopes)获取令牌,然后将令牌发送到我的NodeJS后端服务器验证

I found this关于如何解码它的重要堆栈流问题,缓存密钥ID(KID)以使其每次都不进行往返等等(尚未实现此部分)但是,但有点玩弄它)我唯一的问题是:以下googleapis证书之间的区别是什么:

  • www.googleapis.com/oauth2/v1/certs
  • www.googleapis.com/oauth2/v2/certs
  • www.googleapis.com/oauth2/v3/certs

每个版本的KID都是相同的,但内容完全不同。为什么? v2和v3几乎完全相同,只是v2有一个" =="附加在属性' n'

的值的末尾

最重要的是,我使用哪个版本?

我认为这些证书称为JSON Web Keys(JWK)。我也读过“x5c'那是什么?

PS:从我的Android应用程序到我的nodejs的令牌是:

{
 "iss": "accounts.google.com",
 "sub": "SOME_LONG_NUMBER_THAT_I_DONT_KNOW_IF_SHOULD_SHOW",
 "azp": "SERVER_CLIENT_ID",
 "email": "ANDROID_USER_EMAIL",
 "email_verified": "true",
 "aud": "ANDROID_CLIENT_ID",
 "iat": "SOME_NUMBER",
 "exp": "SOME_NUMBER",
 "alg": "RS256",
 "kid": "e53139984bd36d2c230552441608cc0b5179487a"
}

1 个答案:

答案 0 :(得分:4)

Version 1似乎是关键ID到证书字符串的基本JSON映射。我没有任何内部信息,但我推测这是一个简单的"本土的"谷歌某人编写的格式是分发公钥的简便方法。

如您所知,versions 23以JSON Web Key(JWK)格式分发。此格式在正式规范RFC 7517中定义,该规范明确说明了如何构造表示加密密钥的JSON响应。

至于v2和v3之间的区别,看起来v2包括trailing equal signs as padding,而在v3中他们只是将它们剥离了。

  

我还读过“x5c'那是什么?

the specification,' x5c'被定义为一个可选参数,用于指定加密证书列表,这些加密证书一起构成"chain of trust",允许客户端应用程序通过依次验证每个证书并跟随链回到已知的受信任root certificate来验证密钥。 3}}

  

最重要的是,我使用哪个版本?

如果可能,我建议使用最新版本。但只要键本身相同,它可能并不重要。