【问题标题】:different payload from google oauth2 response causes json error来自 google oauth2 响应的不同有效负载导致 json 错误
【发布时间】:2015-02-08 06:22:16
【问题描述】:

我的应用上有 Google 的 oauth2,其中 id_token 是一个用句点分隔的字符串。我读到here id_token 被分隔为三个部分,第二部分包含实际的有效负载。如果我将字符串分开并解码第二个值,我会得到我期望使用我的帐户的值。我不明白的是,当我尝试使用我妻子的帐户时,如果我将第二部分解析为 json 一个“意外字符”错误。

我尝试从控制台获取字符串并通过在线 base64 解码器运行它,但确实看到 json 没有得到正确评估。

{"iss":"accounts.google.com","sub":"111475728886332985448","azp":"74770364428-621332j2r657ish4jh94n9n1k0mplpgd.apps.googleusercontent.com","email":"her.email@gmail .com","at_hash":"lSKFL86HsCeu7TU4tsYBTw","email_verified":true,"aud":"74300369428-621332j2r657ish4jh94n9n1k0mplpgd.apps.googleusercontent.com","iat":1414192526,"exp":191819642...

这两个帐户之间有什么不同会导致我的电子邮件返回有效的 json 而她的不返回?

【问题讨论】:

  • 不确定你的粘贴是否有问题,但你的 JSON 字符串末尾有一堆奇怪的字符,end char 应该是 } 而不是 ...
  • 嗯,我想这就是他的问题所在......

标签: oauth-2.0 google-oauth


【解决方案1】:

id_token 是 JSON Web Token (JWT),在这种情况下使用紧凑序列化。 JWT 元素是 base64url 编码,没有填充,这与普通的 base64 编码略有不同,可以从:https://datatracker.ietf.org/doc/html/draft-ietf-jose-json-web-signature-38#appendix-C

一个不错的 id_token/JWT 解码器可以在这里找到:http://jwt.io/

您可能很幸运拥有自己的 id_token,因此它不需要填充。

【讨论】:

  • 所以只是为了确定:我怀疑您使用的是普通 base64 解码而不是所需的 base64url-with-no-padding 解码
  • 谢谢!我正在阅读 google 在 OpenID Connect (developers.google.com/accounts/docs/OpenIDConnect) 上的文档,我看到的只是“ID 令牌是一个以 base 64 编码的加密签名 JSON 对象”。除非这是暗示而且我很愚蠢,否则我没有意识到它需要填充。按照您链接到的示例进行操作。
猜你喜欢
  • 2020-06-13
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多