通过refresh_token谷歌oAuth2 unauthorized_client

时间:2013-09-02 11:30:06

标签: perl google-plus google-oauth

我正在尝试在我的控制台perl脚本中使用oAuth2 web redirect auth中的刷新令牌。我的javascript中使用的客户端ID是相同且正确的客户端ID,我检查了5次,这与我在谷歌API控制台中的相同。

客户端密钥被选中,两个是正确的。

刷新令牌是使用approval_prompt=force&access_type=offline

创建的

这是我使用的perl示例代码:

# -----------------------------------------------------------------------------------
my $CLIENT_ID     = 'XXXXX.apps.googleusercontent.com';
my $CLIENT_SECRET = 'YYYYYYYYYYY';
# -----------------------------------------------------------------------------------
# TESTING
my $refresh_token = '1/is_5_minutes_old';
# -----------------------------------------------------------------------------------

my $string = '';
$string .= 'grant_type=refresh_token';
$string .= '&client_id=' . $CLIENT_ID;
$string .= '&client_secret=' . $CLIENT_SECRET;
$string .= '&refresh_token=' . $refresh_token;

$ua = LWP::UserAgent->new;

my $req =
  HTTP::Request->new( POST => 'https://accounts.google.com/o/oauth2/token' );
$req->content_type('application/x-www-form-urlencoded');
$req->content($string);
print $string . "\n";
my $res = $ua->request($req);
print $res->as_string;

它的回应:

HTTP/1.1 400 Bad Request
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Connection: close
Date: Mon, 02 Sep 2013 10:50:26 GMT
Pragma: no-cache
Server: GSE
Content-Type: application/json
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Alternate-Protocol: 443:quic
Client-Date: Mon, 02 Sep 2013 10:50:26 GMT
Client-Peer: 74.125.136.84:443
Client-Response-Num: 1
Client-SSL-Cert-Issuer: /C=US/O=Google Inc/CN=Google Internet Authority G2
Client-SSL-Cert-Subject: /C=US/ST=California/L=Mountain View/O=Google Inc/CN=accounts.google.com
Client-SSL-Cipher: RC4-SHA
Client-SSL-Warning: Peer certificate not verified
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block

{
  "error" : "unauthorized_client"
}

我希望你能有所帮助。

greatings

2 个答案:

答案 0 :(得分:13)

无效的客户端通常意味着客户端ID和客户端密码不匹配,或者其中一个客户端密码中存在拼写错误(尽管你提到你已经仔细检查过这个!)。代码中没有任何内容看起来错误。

当您检索刷新令牌时,您是否可以尝试将随附的访问令牌放入tokeinfo端点,并确保客户端ID的值与您配置的值匹配:https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= < / p>

可能值得抛弃请求,以确保没有错误(例如,内容长度标题太短或类似)。

答案 1 :(得分:1)

转储请求是关键。为了帮助,这是我之前提到的一个..

==POST== 
https://accounts.google.com/o/oauth2/token
refresh_token=1/_PEzU2m71wertwertwerJUtrtrytrytryf3trytryoCo
&client_id=612222222225
&client_secret=Q7334534543534yKLu
&grant_type=refresh_token

您使用的是客户ID的缩写形式,即。只是数字?