首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用todoist API: invalid_grant

使用todoist API: invalid_grant
EN

Stack Overflow用户
提问于 2016-05-11 12:11:48
回答 2查看 536关注 0票数 2

我正在添加通过一个简单的应用程序将待办事项发布到我的Todist列表的功能。目前,当我将代码转换为一个"error"=>"invalid_grant"时,我将得到响应access_token。

在这种情况下,我也不清楚“invalid_grant”到底指的是什么。我发现的其他答案似乎是关于各种Google的。Todoist API文档没有提到这一点。

对令牌交换的post请求是:

代码语言:javascript
复制
uri = URI('https://todoist.com/oauth/access_token')
result = Net::HTTP.post_form(uri, client_id: ENV['TODOIST_CLIENT_ID'], client_secret: ENV['TODOIST_CLIENT_SECRET'], code: params[:code])
json_body = JSON.parse(result.body) # <- prints error

任何帮助理解和解决这一点都是非常感谢的。

更新

在阅读川崎高彦的答案后,我更新了请求如下,但有相同的错误信息。

代码语言:javascript
复制
uri = URI('https://todoist.com/oauth/access_token')
data = {
  :client_id => ENV['TODOIST_CLIENT_ID'],
  :client_secret => ENV['TODOIST_CLIENT_SECRET'],
  :code => params[:code],
  :grant_type => 'authorization_code',
}
result = Net::HTTP.post_form(uri, data)
json_body = JSON.parse(result.body)
EN

回答 2

Stack Overflow用户

发布于 2016-05-11 12:25:17

添加以下内容。

代码语言:javascript
复制
grant_type: 'authorization_code'

详见RFC 6749,4.1.3。访问令牌请求

关于修订问题的补充意见。

看来Todoist的OAuth实现还不成熟。我看了一下他们的API文档,很快就发现了一些针对RFC 6749的违规行为。

例如,(1)作用域必须用空格分隔,但它们的文档说应该使用逗号。(2)它们的令牌端点不需要规范所要求的grant_type请求参数。(3)当所提供的授权代码出错时,来自令牌端点的响应中的error参数的值应该是invalid_grant,但是他们的API文档表示该值将是bad_authorization_code,这不是一个官方值。

此外,这并不违反,但其撤销访问令牌的API规范意味着他们不知道访问令牌撤销的官方规范RFC 7009的存在。

对于公共客户端(RFC 6749,2.1。客户类型),例如智能手机应用程序,令牌端点的client_secret请求参数应该是可选的,但是他们的API文档表示它是必需的。

因为它们的OAuth实现不符合规范,所以最好直接询问Todoist。

票数 1
EN

Stack Overflow用户

发布于 2019-06-20 21:19:28

最新版本的Todoist API (v8)不需要grant_type参数,因此目前不是问题所在。

接收invalid_grant错误的两个可能原因是:

  1. code没有在一定的时间内使用,并且已经过期。
  2. code已用于生成访问令牌,因此不再有效。

在这两种情况下,在发出POST请求之前生成一个新的code应该会对问题进行排序。

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

https://stackoverflow.com/questions/37162331

复制
相关文章

相似问题

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