sironekotoroの日記

Perl で楽をしたい

Perl で Google Drive API のアクセストークンを更新する

今日も Perl から Google Drive API v3 をやっていきます。

リフレッシュトークンを使ってアクセストークンを更新する

Google の発行したアクセストークンは 3600 秒、つまり 1 時間で失効します。

失効する都度、アクセストークンを発行しても良いのですが(うちもそうしてた)、さすがに面倒・・・になってきました。

そこで、アクセストークンと一緒に発行されるリフレッシュトークンを利用してアクセストークンを更新します。

その際には以下のものが必要です。

  • クライアントID
  • クライアント シークレット
  • アクセストーク
  • リフレッシュトーク

それらを POST で GoogleAPI になげると、新しいアクセストークンが返ってきます。

これでまだ戦えますね!

注: ACCESS_TOKEN なくても更新できたので、コード更新しております

#!/usr/bin/env perl
use strict;
use warnings;

use Data::Dumper;
use HTTP::Tiny;
use JSON;
use URI;

my $CLIENT_ID = "";
my $CLIENT_SECRET = "";
my $REFRESH_TOKEN = "";

my $URI = URI->new('https://oauth2.googleapis.com/token');

my $ht = HTTP::Tiny->new();

my $response = $ht->request(
    'POST', $URI,

    {   content => encode_json(
            {   client_id     => $CLIENT_ID,
                client_secret => $CLIENT_SECRET,
                grant_type    => 'refresh_token',
                refresh_token => $REFRESH_TOKEN,
            }
        )
    }
);

my $json = decode_json($response->{content});
print Dumper $json;

# "access_token": "hogehogefoofoobarbar",
# "expires_in": 3599,
# "scope": "https://www.googleapis.com/auth/drive",
# "token_type": "Bearer"