使用 Google OAuth2.0 时出现错误请求

2024-05-10

从 Salesforce 中使用 Google OAuth 时,我收到 400 错误请求。以下错误与无效的 grant_type 有关,但如果您查看“使用刷新令牌”下的文档,您会发现它是正确的。

https://developers.google.com/identity/protocols/OAuth2WebServer https://developers.google.com/identity/protocols/OAuth2WebServer

Error:

{
 "error": "unsupported_grant_type",
 "error_description": "Invalid grant_type: "
}

我正在尝试用刷新令牌交换访问令牌,并且可以使用 CURL 成功完成此操作,代码如下。

curl \
  -d refresh_token=REFRESH_TOKEN \
  -d client_id=CLIENT_ID \
  -d client_secret=CLIENT_SECRET \
  -d grant_type=refresh_token https://www.googleapis.com/oauth2/v4/token

我在 Salesforce 中使用的代码:

    Http http = new Http();
    HttpRequest req = new HttpRequest();

    req.setHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    req.setHeader('Content-Length', '0');
    req.setHeader('client_id', 'CLIENT_ID');
    req.setHeader('client_secret', 'CLIENT_SECRET');
    req.setHeader('refresh_token', 'REFRESH_TOKEN');
    req.setHeader('grant_type', 'refresh_token'); 

    req.setEndpoint('https://www.googleapis.com/oauth2/v4/token');
    req.setMethod('POST');

    return http.send(req);

The -dcurl 选项使用以下命令发送请求正文中的数据application/x-www-form-urlencoded内容类型是 OAuth2 中支持的发送这些参数的方式之一。

-d将 POST 请求中的指定数据发送到 HTTP 服务器,就像用户填写 HTML 表单并按下提交按钮时浏览器执行的操作一样。这将导致curl 使用内容类型application/x-www-form-urlencoded 将数据传递到服务器。

在 Salesforce 代码中,您设置正确的内容类型,但随后将 OAuth2 相关参数作为附加标头发送,而不是在请求正文中发送。

您需要更新代码以使用以下方式发送请求正文中的参数application/x-www-form-urlencoded编码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Google OAuth2.0 时出现错误请求 的相关文章

随机推荐