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

Posted

技术标签:

【中文标题】https://www.googleapis.com/oauth2/v3/certs 中 v1、v2 和 v3 之间的区别【英文标题】:Difference between v1, v2 and v3 in https://www.googleapis.com/oauth2/v3/certs 【发布时间】:2015-09-25 11:48:08 【问题描述】:

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

我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】:

Version 1 似乎是密钥 ID 到证书字符串的基本 JSON 映射。我没有任何内幕消息,但我推测这是一种简单的“本土”格式,谷歌的某个人编造了一种简单的方式来分发他们的公钥。

如您所述,versions 2 和 3 以 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。

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

如果可能,我建议使用最新版本。但只要密钥本身是相同的,这可能并不重要。

【讨论】:

以上是关于https://www.googleapis.com/oauth2/v3/certs 中 v1、v2 和 v3 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章