refresh_token无效的凭据错误

时间:2013-06-04 04:05:15

标签: perl authorization google-mirror-api

我很难过。我正在尝试手动获取刷新令牌以使用Perl在Mirror API上为我加载访问令牌,并且它一直给我凭据错误。当我在PHP示例代码中加载确切的HTTP请求时(我打印出要比较的HTTP),同样的refresh_token工作正常。

这是我的Perl HTTP请求:

* POST https://accounts.google.com/o/oauth2/token 主持人:accounts.google.com 用户代理:libwww-perl / 6.02 内容长度:175 内容类型:application / x-www-form-urlencoded CLIENT_ID = client_id_goes_here&安培; client_secret = client_secret_goes_here&安培; refresh_token = refresh_token_goes_here&安培; grant_type = refresh_token *

这是同一个refresh_token上的PHP:

* POST / o / oauth2 / token HTTP / 1.1 content-type:application / x-www-form-urlencoded 内容长度:175 CLIENT_ID = client_id_goes_here&安培; client_secret = client_secret_goes_here&安培; refresh_token = refresh_token_goes_here&安培; grant_type = refresh_token *

我的Perl看起来像这样:

my $auth_response = $ua->request(POST 'https://accounts.google.com/o/oauth2/token',
            'Host'          => 'accounts.google.com',
            'Content_Type'  => 'application/x-www-form-urlencoded',
            'Content'       => [
                'client_id'         =>  $client_id,
                'client_secret'     =>  $client_secret,
                'refresh_token'     =>  $credentials->{'refresh_token'},
                'grant_type'        =>  'refresh_token',
            ],
        );

HELP! : - )

1 个答案:

答案 0 :(得分:1)

看起来你正在使用LWP。我讨价还价this quick example,它使用LWP与Google一起跳舞OAuth 2.0舞蹈,从开始到令牌刷新。

根据我的实验,到目前为止您显示的代码看起来是正确的。这是我用来刷新访问令牌的确切代码:

my $auth_response = $ua->request(POST 'https://accounts.google.com/o/oauth2/token',
            'Host'          => 'accounts.google.com',
            'Content_Type'  => 'application/x-www-form-urlencoded',
            'Content'       => [
                'client_id'         =>  $client_id,
                'client_secret'     =>  $client_secret,
                'refresh_token'     =>  $refresh_token,
                'grant_type'        =>  'refresh_token',
            ],
        );

如果您仍在观察错误,请尝试克隆该repo,填充您的client_id和client_secret,并查看问题是否仍然存在。如果是,请分享print Dumper($auth_response);的结果,这将提供大量有用的信息。

此外,Perl不是Google官方支持的语言,但看起来社区已经出现:有一个开源Perl client library。我以前从未使用它,但你可能想看看它。