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

我尝试通过Google Sign-in在Android上validation用户,获取帐户名称,通过GoogleAuthUtil.getToken(getApplicationContext(),app,scopes)获取令牌,然后将令牌发送到我的NodeJS后端服务器核实

我发现这个伟大的stackoverflow问题如何解码它,caching密钥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密钥(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似乎是证书string的主要ID的基本JSON映射。 我没有任何内幕消息,但是我会推测这是一种简单的“本土化”格式,有人在谷歌上作为一种简单的方式来分发他们的公钥。

如您所知, 版本2和版本 3以JSON Web密钥(JWK)格式分发。 这种格式是在一个正式的规范RFC7517中定义的,它规定了如何构造一个代表encryption密钥的JSON响应。

至于v2和v3之间的区别,看起来v2包含了作为填充的尾部等号,而在v3中,他们只是简单地将其删除。

我也读过“x5c”这个词是什么意思?

在说明书中 ,'x5c'被定义为一个可选参数,用于指定encryption证书列表,这些证书一起形成一个“信任链” ,允许客户端应用程序通过依次validation每个证书并跟随链回来validation密钥到已知的可信根证书 。

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

如果可能,我会build议使用最新的版本。 但只要密钥本身是相同的,可能无关紧要。