使用todoist API进行验证:invalid_grant

时间:2016-05-11 12:11:48

标签: ruby-on-rails oauth

我正在添加通过一个简单的应用程序将待办事项发布到我的Todist列表的功能。目前,我在为access_token交换代码时收到了回复use strict; use warnings 'all'; use YAML::XS 'LoadFile'; use MyUtils 'parse_yaml'; my $input_file = 'data.yaml'; my $yaml_input = LoadFile($input_file); parse_yaml($input_file); # this variable has to be passed to the function parse_yaml which is in other file.

在这种情况下,我不确定'invalid_grant'究竟是指什么。我发现其他答案似乎与各种Google API有关。 Todoist API documentation没有提到它。

令牌交换的发布请求是:

package MyUtils;

use strict;
use warnings;

use Exporter 'import';

our @EXPORT_OK = 'parse_yaml';

sub parse_yaml {
    my ($yaml_file) = @_;

    # some processing
}

1;

非常感谢任何帮助理解和解决这个问题。

更新

在阅读Takahiko Kawasaki的回答后,我已将请求更新为以下内容,但有相同的错误消息。

"error"=>"invalid_grant"

2 个答案:

答案 0 :(得分:1)

添加以下内容。

grant_type: 'authorization_code'

有关详细信息,请参阅RFC 6749,4.1.3. Access Token Request

<小时/> 对修订后的问题的补充评论。

似乎Todoist的OAuth实施还不成熟。我查看了他们的API document,很快发现了一些针对RFC 6749的违规行为。

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

此外,这不是违规行为,但撤销访问令牌的API规范意味着他们不知道存在访问令牌撤销的正式规范,RFC 7009

对于公共客户(RFC 6749,2.1. Client Types),例如智能手机应用程序,令牌端点的client_secret请求参数应为可选,但其API文档表明必需

由于他们的OAuth实施不符合规范,因此最好直接询问Todoist。

答案 1 :(得分:0)

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

出现invalid_grant错误的两个可能原因是:

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

在两种情况下,在发出POST请求之前生成一个新的code应该可以解决问题。