2013-09-02 9 views
8

コンソールのperlスクリプトでoAuth2 Webリダイレクト認証の更新トークンを使用しようとしています。クライアントのIDは同じで、正しいクライアントIDです。私はjavascriptで使用しました。私は5回、私のgoogle APIのコンソールと同じものです。Google oAuth2 unauthorized_client by refresh_token

クライアントシークレットが2つ選択されていることが正しいです。

リフレッシュトークンは私のperlのサンプルコードは、私が使用している。ここapproval_prompt=force&access_type=offline

で作成されました:

# ----------------------------------------------------------------------------------- 
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

答えて

11

無効なクライアントは通常のクライアントIDとクライアントシークレットが一致しないことを意味し、またはそれらのいずれかにタイプミスがあります(あなたが二重にこれをチェックしました言及のに!)。あなたのコードには何も間違っています。

あなたはリフレッシュトークンを取得する場合、あなたはtokeinfoエンドポイントにそれと一緒に来たアクセストークンを置くと、必ずそこにクライアントIDの値は、あなたが設定したものと一致することを試みることができる:https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=

間違いがないことを確認するためにリクエストを破棄することは価値があるかもしれません(例えば、内容の長さが短いヘッダーなど)。

1

リクエストをダンプすることが重要です。助けるために、ここで私は..以前

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

を焼いあなたはつまり、クライアントIDの短い形式を使用しているものです。ちょうど番号?

関連する問題