首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >谷歌OAuth2通过cURL返回"unsupported_grant_type“

谷歌OAuth2通过cURL返回"unsupported_grant_type“
EN

Stack Overflow用户
提问于 2017-04-14 17:26:57
回答 4查看 9K关注 0票数 1

我想获得有关谷歌帐户的数据。我使用下一段代码:

代码语言:javascript
复制
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://www.googleapis.com/oauth2/v4/token',
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'Cache-Control: no-cache',
        'Content-Type: application/x-www-form-urlencoded',
    ],
    CURLOPT_POSTFIELDS => [
        'code' => $code,
        'client_id' => '{MY_CLIENT_ID}',
        'client_secret' => '{MY_CLIENT_SECRET}',
        'redirect_uri' => '{SOME_URL}'
        'grant_type' => 'authorization_code',
    ]
));

$result = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

结果,我得到了下一个错误:

代码语言:javascript
复制
{
    "error": "unsupported_grant_type",
    "error_description": "Invalid grant_type: "
}

我使用下面的说明:

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

变量$code和其他数据有效!因为我尝试通过"PostMan“发送请求,所以我得到了正确的结果。

请告诉我,我哪里搞错了?

EN

回答 4

Stack Overflow用户

发布于 2017-04-14 17:58:13

试着这样做:

代码语言:javascript
复制
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://www.googleapis.com/oauth2/v4/token',
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_POSTFIELDS => http_build_query([
        'code' => $code,
        'client_id' => '{MY_CLIENT_ID}',
        'client_secret' => '{MY_CLIENT_SECRET}',
        'redirect_uri' => '{SOME_URL}'
        'grant_type' => 'authorization_code',
    ]),
));

顺便说一句,您可以使用以下命令调试curl请求

代码语言:javascript
复制
CURLOPT_VERBOSE => true,
票数 0
EN

Stack Overflow用户

发布于 2018-03-02 05:29:08

我在c#中这样做,我认为我的问题可能是相关的。在指定redirect_url或任何其他字符串时,请确保对URI进行转义,否则会使post请求变得混乱。这是因为请求是使用application/x-www-form-urlencoded类型发送的。

票数 0
EN

Stack Overflow用户

发布于 2019-03-21 03:59:36

请确保您的授权码未过期。因为这就是我做错的地方,我得到了同样的错误响应。我实际上是通过发送一个旧的授权码来测试我的代码的。一旦我将我的代码绑定到实际的oauth工作流,它就可以工作了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43408821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档