【问题标题】:Can't get access token for ExactOnline with OAuth无法使用 OAuth 获取 ExactOnline 的访问令牌
【发布时间】:2015-07-14 16:16:23
【问题描述】:

我正在按照 OAuth 教程 here 获取访问代码,以便验证我对在线会计软件 Exact Online 的 API 请求。

但是,我被困在第 3 步,我使用第 2 步中返回的授权码来获取访问令牌。

这是我正在尝试的:

require 'httparty'

EXACT_CLIENT_ID = '<REDACTED>'
EXACT_CLIENT_SECRET = '<REDACTED>'
EXACT_SERVER_BASE_URL = 'https://start.exactonline.nl'
EXACT_AUTH_CODE = '<REDACTED>'

response = HTTParty.post("#{EXACT_SERVER_BASE_URL}/api/oauth2/token", headers: {'Content-Type' => 'application/x-www-form-urlencoded'}, query: {code: EXACT_AUTH_CODE, redirect_uri: 'http://<REDACTED>.runscope.net/', grant_type: 'authorization_code', client_id: EXACT_CLIENT_ID, client_secret: EXACT_CLIENT_SECRET})

puts response
# => 'Bad request'

puts response.code
# => 400

我不明白为什么会这样。查看响应代码列表here时,代码的意思是:

由于格式错误,服务器无法理解请求 句法。客户端不应该重复请求 修改。

我做错了什么?

更新 #1:

我也试过了:

response_2 = HTTParty.post("#{EXACT_SERVER_BASE_URL}/api/oauth2/token", :headers => {'Content-Type' => 'application/x-www-form-urlencoded'}, :body => {'code' => EXACT_AUTH_CODE, 'redirect_uri' => 'http://<REDACED>.runscope.net/', 'grant_type' => 'authorization_code', 'client_id' => EXACT_CLIENT_ID, 'client_secret' => EXACT_CLIENT_SECRET})

但反应是一样的。

【问题讨论】:

    标签: ruby oauth oauth-2.0 httparty exact-online


    【解决方案1】:

    即使使用 HTTP POST 方法,您也可以通过将值提供给 query: 参数到 .post 方法来将值作为查询参数提供。相反,您应该在 body: 参数中提供它们,请参阅:How can I implement this POST request using HTTParty?

    还有你的语法。 body: :body 应该是固定的,所以它看起来像:

    response_2 = HTTParty.post("#{EXACT_SERVER_BASE_URL}/api/oauth2/token", :headers => {'Content-Type' => 'application/x-www-form-urlencoded'}, :body => {'code' => EXACT_AUTH_CODE, 'redirect_uri' => 'http://<REDACED>.runscope.net/', 'grant_type' => 'authorization_code', 'client_id' => EXACT_CLIENT_ID, 'client_secret' => EXACT_CLIENT_SECRET})
    

    最后但并非最不重要的一点是:代码值只能一次性使用,并且生命周期很短;确保您使用的是新获得的。

    【讨论】:

    • 我也试过使用body:参数,见上面更新的问题,但结果是一样的......
    • code 值只能使用一次,并且生命周期很短;确保您使用的是新获得的
    • 现在一切正常!请更新您的答案,以便我接受
    猜你喜欢
    • 2012-12-10
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多