Curl 无法获取Google OAuth 2.0访问令牌

Curl 无法获取Google OAuth 2.0访问令牌,curl,oauth-2.0,google-oauth,google-drive-realtime-api,Curl,Oauth 2.0,Google Oauth,Google Drive Realtime Api,我试图通过传递下面屏幕截图中显示的参数来使用REST API获取访问令牌,但我遇到了错误缺少必需的参数:grant_type。我在Chrome浏览器中尝试了cURL和高级RESTAPI。我使用cURL和高级REST API发送这些参数: client_secret;xxx refresh_token; redirect_uri;https%3A%2F%2Fwww%2Eexample%2Ecom%2Foauth2callback scope;https://www.googleapis.com/a

我试图通过传递下面屏幕截图中显示的参数来使用REST API获取访问令牌,但我遇到了错误
缺少必需的参数:grant_type
。我在Chrome浏览器中尝试了cURL和高级RESTAPI。我使用cURL和高级REST API发送这些参数:

client_secret;xxx
refresh_token;
redirect_uri;https%3A%2F%2Fwww%2Eexample%2Ecom%2Foauth2callback
scope;https://www.googleapis.com/auth/drive
client_id;xxxxxxxx.apps.googleusercontent.com
access_token;
cURL语法:

D:\>curl -k --header Content-Type=application/x-www-form-urlencoded -i -X POST "https://accounts.google.com/o/oauth2/token" -F 'code=4%2FdpbtMVUpzNFAfGHlxrNvfMlvHrPWk_m8y2I-thDdsLk.wvBSFgWEqW0Zcp7tdiljKKZFG-jOlgI' -F 'client_id=xxxxxxxx.apps.googleusercontent.com' -F 'client_secret=xxx' -F 'redirect_uri=https%3A%2F%2Fwww%2Eexample%2Ecom%2Foauth2callback'  -F 'grant_type=authorization_code'

如何解决此问题?

显然,您正在调用令牌端点以将
代码
交换为
访问令牌
,作为授权代码授予的一部分。有几件事:

  • 不要使用
    -F
    标志,因为它将生成
    多部分formdata
    标题,但您需要
    www-form-urlencoded
    -d
  • 不要对谷歌使用
    -k
    标志,因为这会使事情变得不安全;Google提供了一个您应该检查的有效SSL证书
  • 内容类型
    参数置于引号中
  • 添加一些额外的语法优化后,您应该能够使用:

    curl -v -i \
        -d "code=4%2FdpbtMVUpzNFAfGHlxrNvfMlvHrPWk_m8y2I-thDdsLk.wvBSFgWEqW0Zcp7tdiljKKZFG-jOlgI" \
        -d 'client_id=xxxxxxxx.apps.googleusercontent.com' \
        -d 'client_secret=xxx' \
        -d 'redirect_uri=https%3A%2F%2Fwww%2Eexample%2Ecom%2Foauth2callback' \
        -d 'grant_type=authorization_code' \
        https://accounts.google.com/o/oauth2/token