Google 的 OpenID Connect 说:OAuth 2 参数只能有一个值:client_id
Google's OpenID Connect says: OAuth 2 parameters can only have a single value: client_id
作为 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
在交换访问令牌的授权代码时设置了 authorization
header。如果你删除这个 header 一切正常。
检查 Net::OAuth2::Profile::WebServer
模块中的 get_access_token
方法。 authorization
header 包括 client_id:client_secret
base64 编码的字符串。显然 Google 现在将此重复视为错误。
解决此问题的正确方法是在创建 Net::OAuth2::Profile::WebServer
object 时设置 secrets_in_params
参数。查看 Net::OAuth2::Profile 文档了解更多详情。
Google changed this behavior few days ago,因此任何使用 Basic Auth headers AND body 请求参数的 OAuth2 库将开始看到像
这样的消息
OAuth 2 parameters can only have a single value: client_id
或
OAuth 2 parameters can only have a single value: client_secret
因此,您现在必须 NOT 同时使用(Auth headers 和 body 请求参数)将凭据发送到 Google.
并且根据 RFC 6749,发送凭据的首选方式是通过 Auth headers(感谢 @JanKrüger 提醒我这件事)。
作为 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
在交换访问令牌的授权代码时设置了 authorization
header。如果你删除这个 header 一切正常。
检查 Net::OAuth2::Profile::WebServer
模块中的 get_access_token
方法。 authorization
header 包括 client_id:client_secret
base64 编码的字符串。显然 Google 现在将此重复视为错误。
解决此问题的正确方法是在创建 Net::OAuth2::Profile::WebServer
object 时设置 secrets_in_params
参数。查看 Net::OAuth2::Profile 文档了解更多详情。
Google changed this behavior few days ago,因此任何使用 Basic Auth headers AND body 请求参数的 OAuth2 库将开始看到像
这样的消息OAuth 2 parameters can only have a single value: client_id
或
OAuth 2 parameters can only have a single value: client_secret
因此,您现在必须 NOT 同时使用(Auth headers 和 body 请求参数)将凭据发送到 Google.
并且根据 RFC 6749,发送凭据的首选方式是通过 Auth headers(感谢 @JanKrüger 提醒我这件事)。