谷歌的OpenID Connect说:OAuth 2参数只能有一个值:client_id

Jan*_*ger 5 oauth-2.0 google-oauth

作为OpenID Connect(OAuth2 for Login)的一部分,我的应用程序应该通过端点请求一次授权代码的访问令牌https://www.googleapis.com/oauth2/v3/token.根据文档,此请求需要传递5个参数,client_id其中包括.这正是我的应用程序所做的,使用Perl模块Net::OAuth2.

一切都运作良好几个月,但今天我被告知它停止工作.没有对应用程序代码或它使用的库进行更新.

我的应用程序现在在调用token端点时从服务器接收的消息是400错误响应:

OAuth 2 parameters can only have a single value: client_id
Run Code Online (Sandbox Code Playgroud)

谷歌搜索表明,之前没有人见过这个消息,或者过着讲故事.Google的OpenID Connect似乎没有普遍的问题(基于它的其他服务正在完美运行),旧的登录协议的即将关闭似乎并不相关.

更多测试:删除除client_id引起此错误消息之外的所有参数:

Required parameter is missing: grant_type
Run Code Online (Sandbox Code Playgroud)

仅提供client_idgrant_type再次生成原始错误消息.

有谁知道这里发生了什么?

dmi*_*ryb 2

遇到同样的错误。问题似乎是在交换访问令牌的授权代码时NET::OAuth2设置标头。authorization如果删除此标头,一切正常。检查模块get_access_token中的方法Net::OAuth2::Profile::WebServer。标authorization头包含client_id:client_secretbase64 编码的字符串。显然,谷歌现在将这种重复视为错误。

secrets_in_params解决这个问题的正确方法是在创建对象时设置参数Net::OAuth2::Profile::WebServer。有关更多详细信息,请参阅Net::OAuth2::Profile文档。