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

时间:2016-11-29 21:46:16

标签: http oauth oauth-2.0 salesforce google-oauth

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

getComputedStyle()

错误:

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

我正在尝试为访问令牌交换refresh_token,并且可以使用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);

2 个答案:

答案 0 :(得分:6)

-d curl选项使用application/x-www-form-urlencoded内容类型在请求正文中发送数据,这是在OAuth2中发送这些参数的受支持方式之一。

  

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

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

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

答案 1 :(得分:0)

我在提琴手中遇到了同样的问题。我添加了此评论,因为它可能对某人有所帮助。

https://oauth2.googleapis.com/token
Content-Type: application/x-www-form-urlencoded

Request Body:
code=<some code here>&
client_id=your_client_id&
client_secret=your_client_secret&
redirect_uri=https%3A//oauth2.example.com/code&
grant_type=authorization_code

Goole api响应:

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

发生此问题是因为请求正文在每个参数之间都有换行符。如果您删除所有换行符,则将所有值保留在单个行请求中就可以了。例如请求正文:

code=<some code here>&client_id=your_client_id&client_secret=your_client_secret&redirect_uri=https%3A//oauth2.example.com/code&grant_type=authorization_code