【问题标题】:Not able to fetch Google OAuth 2.0 access token无法获取 Google OAuth 2.0 访问令牌
【发布时间】:2015-02-08 17:27:04
【问题描述】:

我尝试通过传递下面屏幕截图中显示的参数来使用 REST API 获取访问令牌,但我遇到了错误 Required parameter is missing: grant_type。我在 Chrome 浏览器中尝试过使用 cURL 和 Advanced Rest API。我正在使用 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'

如何解决这个问题?

【问题讨论】:

    标签: curl oauth-2.0 google-oauth google-drive-realtime-api


    【解决方案1】:

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

    1. 不要使用-F 标志,因为它会生成multipart-formdata 标头,但您需要www-form-urlencoded,就像-d 一样
    2. 不要对 Google 使用 -k 标志,因为这会使事情变得不安全; Google 提供了一个有效的 SSL 证书,您应该检查一下
    3. Content-Type 参数放在引号中

    添加一些额外的语法优化后,您应该可以使用:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多