【发布时间】:2015-06-23 20:17:19
【问题描述】:
作为 OpenID Connect(用于登录的 OAuth2)的一部分,我的应用程序应该通过端点 https://www.googleapis.com/oauth2/v3/token 请求访问令牌,给定一次性授权代码。根据documentation,这个请求需要传递5个参数,其中client_id。这正是我的应用程序所做的,使用 Perl 模块 Net::OAuth2。
几个月来一切正常,但今天我收到通知说它停止工作了。没有对应用程序代码和它使用的库进行更新。
调用token 端点时,我的应用程序现在从服务器收到的消息是这样的,在400 错误响应中:
OAuth 2 parameters can only have a single value: client_id
Google 搜索表明,以前没有人见过这条消息,也没有人活着讲述这个故事。 Google 的 OpenID Connect 似乎没有普遍问题(基于它的其他服务运行良好),而且旧登录协议即将关闭似乎并不相关。
更多测试:删除除client_id 之外的所有参数会导致此错误消息:
Required parameter is missing: grant_type
仅提供 client_id 和 grant_type 会再次产生原始错误消息。
有人知道这里发生了什么吗?
【问题讨论】:
-
我没有遇到这样的问题;也许这个问题是由
NET::OAuth2重复参数(即发送 client_id 两次)和谷歌加强他们的实施引起的?您可以通过使用 cURL 调用手动交换code和/或查看NET::OAuth2在线发送的 HTTP 发布参数来检查。 -
@HansZ。好主意,谢谢,刚刚添加了代码来转储生成的请求。但是,查询字符串和 POST 正文中没有重复。我现在正在尝试从 Google API 团队获得帮助,但如果您有任何进一步的想法,我们将不胜感激。
-
如何抓住
code,因为它并没有被消耗,并在cURL调用中使用它;这个对我有用:curl -v -d "grant_type=authorization_code&redirect_uri=<redirect_uri>&client_id=<client_id>&client_secret=<client_secret>&code=<code>" https://www.googleapis.com/oauth2/v3/token