【问题标题】:Try to get an access_token with google oauth api but redirect to `o/oauth2/approval`尝试使用 google oauth api 获取 access_token,但重定向到 `o/oauth2/approval`
【发布时间】:2013-06-27 10:15:45
【问题描述】:

我现在正在尝试使用 google oauth api 来允许 google 用户登录到我的应用程序。我一直在关注 google 的 OAuth2Login 文档。

我用它来获取代码,它工作得很好。

var u = 'https://accounts.google.com/o/oauth2/auth?'
    + '&response_type=code'
    + '&client_id=' + opts.googleClient
    + '&redirect_uri=' + redirectURI
    + '&scope=' + opts.scope
    + '&approval_prompt=force&access_type=offline';

但是当我尝试使用/o/oauth2/token api 获取 access_token 时,如下所示:

    var u = 'https://accounts.google.com/o/oauth2/token?'
        + 'code=' + code
        + '&client_id=' + opts.googleClient
        + '&client_secret=' + opts.googleSecret
        + '&scope='
        + '&redirect_uri=' + redirectURI
        + '&grant_type=' + 'authorization_code';
    request.post({url: u, json: true}, fn);

它还给我

{
    error: "invalid_request"
}

我已经使用网络栏中的 Chrome 开发人员工具进行了检查,表明请求 URL 是 https://accounts.google.com/o/oauth2/approval?as=-5013c18c497345fc&hl=en&pageId=none&xsrfsign=APsBz4gAAAAAUcwS1TxlojrAPVNCj7ntTlz1H4xQgysC,而不是我发布的内容。

我可以确保我的帖子网址和数据与Google oauthplayground 中的完全一样。但结果完全不同。

我做错了什么吗?请帮忙。

【问题讨论】:

    标签: google-oauth oauth2-playground


    【解决方案1】:

    您发送的数据看起来是正确的,但看起来请求的形成方式有两个错误。

    首先,当您构建消息的表单数据部分时,请确保您对所有值进行 URL 编码,例如如果 redirect_uri 值包含 &,除非它是 URL 编码的,否则会导致问题。

    其次,当您正确地执行 POST 而不是 GET 时,您仍然在查询字符串而不是请求正文中发送参数。将它们移动到正文,将 content-type 设置为 'application/x-www-form-urlencoded',然后您就应该设置好了。

    (它看起来像 JavaScript,但我不确定您使用的是哪些库,所以我没有提供示例代码)

    【讨论】:

    • 感谢您的回复。我实际上正在使用 nodejs,这是我在github gist 上的代码。我尝试使用名为request 的节点模块进行application.x-www-form-urlencoded 调用,但得到了相同的结果。你能帮忙检查一下我的参数和身体是否有问题吗?谢谢。
    • 尝试从表单数据中删除“范围”,并将 URL 中的“code=”移到表单数据中。
    • 有效!非常感谢你。原来google只支持application/x-www-form-urlencodedcontent-type。但我不明白为什么它在他们的 oauthPlayground 中有效。还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2012-06-07
    相关资源
    最近更新 更多