Google OAuth2 API JWS 一致性

Posted

技术标签:

【中文标题】Google OAuth2 API JWS 一致性【英文标题】:Google OAuth2 API JWS conformance 【发布时间】:2015-02-12 23:57:45 【问题描述】:

Google 目前在 https://www.googleapis.com/oauth2/v2/certs 公开以下证书值


 "keys": [
  
   "kty": "RSA",
   "alg": "RS256",
   "use": "sig",
   "kid": "90adc60c0f9f503265a5ebc2c404c88e59882083",
   "n": "u_EOLEKRMNuTA_UPh9R-LTQkF1TNGE6XRVbgvh081A5VtKNFe8b2CmoGvgrm_ochjX0robr8LwpOUSHO779yJANgvwuATHJ4SKYHzN2Gr0yBsC7MyL9CI_eXik4RGiNlEU6mgoy7GGnLtY5-A6OPo-I-4HEttP81LJrmSYh6Y2k=",
   "e": "AQAB"
  ,
  
   "kty": "RSA",
   "alg": "RS256",
   "use": "sig",
   "kid": "5886590f72b8e40668c55fa366c19efb2a22d635",
   "n": "x9mePRk3StM-Tg32S_E8OyBYD8uIHhPPa6U8jkHbpnRf2jEImk1ndIwIoJQCrHl1IsKpY1j81fyQKul0u1Frvb-LFGFVY3L7zSR4hnwzuU_05JtKZRfK-87Kj8JVMJbt34SKRmUitPH4QA23b6g-ORUMYjqWgNWufV6OPy8GYNE=",
   "e": "AQAB"
  
 ]

我正在尝试使用 oic 和 jwkest 访问 Google API,但出现错误

DeSerializationNotPossible: Not base64url encoded

出现问题是因为两个键的n 参数都以= 字符结尾。 IIUC,它们应该是根据JSON Web Algorighms draft编码的Base64URL,而Base64URL根据JSON Web Signature draft去除=字符。

这是我正在使用的 Python 库中的错误,还是 Google 确实不符合规范?如果是后者:我在哪里可以举报?

【问题讨论】:

嗯哇。我发现获得某种官方类型技术响应的最佳地点是 Google+ 上的 Google Oauth2 社区plus.google.com/u/0/communities/107137198518854169493 据我所知,目前 Oauth2 并没有真正的开发团队,它被认为是稳定的。我还没有找到任何报告问题的地方。试试 G+ 那里的人可能会提供帮助,如果没有,我可以看看我是否可以找到可以在 google 上 ping 的人。 好发现;到目前为止,我还没有遇到过问题,因为我使用的客户端已经实现了不会破坏它的填充方法;它当然不符合我的要求 原来 jwkest 的作者现在已经从他的实现中删除了有效性检查。因此,在下一个版本中,实际问题应该消失了。 【参考方案1】:

您说得对,Google 在使用常规 base64 而不是 base64url 时不符合(现在的 RFC)JWA 和 JWS。但是,我相信他们已经意识到这个问题并使用新版本的 JWKS 端点修复它:https://www.googleapis.com/oauth2/v3/certs,它具有与 v2 相同的密钥,但按照规范正确编码。您应该能够将 v3 端点与您正在使用的库一起使用。

【讨论】:

以上是关于Google OAuth2 API JWS 一致性的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OAuth2 授权 Google 分析数据 API

Google 驱动器 API - 无法读取未定义的属性“OAuth2”

用于配置 OAuth2 同意和凭据的 Google Cloud Platform API

从 Oauth2 Google Contacts API 获取用户信息

为啥 Google Calendar API (oauth2) 以“权限不足”响应?

Google OAuth2 服务帐户 API 授权