Google API OAuth2.0のアクセストークン&リフレッシュトークン取得手順メモ

  • 249
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

Googleドライブ上のスプレッドシートを読み書きするアプリ作成のため
Google APIの手続きを行ったのですが、その手続きがとっても面倒でした。
なので、メモしておいた手順を私的な備忘録としてこちらに公開してみます。

今回リフレッシュトークンがどうしても必要だったのですが、
仕様変更で以前よりリフレッシュトークンの取得が若干面倒になったようです。
以下は、リフレッシュトークン取得を目指したやり方になります。

手順

1、取得に使うGoogleアカウント作成、ログイン

2、Google Developers Consoleにアクセス

https://console.developers.google.com
(設定でサイトを日本語に変更可能だが、翻訳がややこしいので英語版推奨)

3、API ProjectをCreate、左メニューのAPIs&auth -> APIsから使いたいAPIを選んでONにする

(今回はDrive APIとDrive SDKを選択)

4、APIs&auth -> Credentials からCreate new Client IDを選択

指示に従って必要項目を選択・記入
クライアントID・SECRETキー・リダイレクトURIが得られる

5、クエリパラメータを追加したURLにブラウザでアクセス

以下のURLに
https://accounts.google.com/o/oauth2/auth
下記クエリパラメータを追加してブラウザでアクセスする

?client_id=[4で取得したクライアントID]
&redirect_uri=[4で設定したリダイレクトURI]
&scope=https://www.googleapis.com/auth/drive (使用したいサービスのAPIにスコープする。今回はGoogleドライブ)
&response_type=code (認証をコードとして出力)
&approval_prompt=force (認証をスキップしない)
&access_type=offline (オフラインでAPIを使用=リフレッシュキーを発行)

つまり、以下のようなURLにブラウザでアクセスする
https://accounts.google.com/o/oauth2/auth?client_id=[4で取得したクライアントID]&redirect_uri=[4で設定したリダイレクトURI]&scope=https://www.googleapis.com/auth/drive&response_type=code&approval_prompt=force&access_type=offline

6、ブラウザ上の認証ボタンを押す

認証ボタンをクリックして飛ぶと、ブラウザ上は何も表示されないが、
URL欄で認証コードが「〜code=」以下に示されているので、その部分をコピーする

7、ターミナル上で4〜6で得たIDやキー等を用いて以下のようなコマンドを実行する

curl -d client_id=[4のクライアントID] -d client_secret=[4のクライアントシークレット] -d redirect_uri=[4のリダイレクトURI] -d grant_type=authorization_code -d code=[6の認証コード] https://accounts.google.com/o/oauth2/token

8、json形式でアクセストークンとリフレッシュトークンが得られる

こんなかんじで結果が帰ってきます↓

{
"access_token" : "アクセストークン",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "リフレッシュトークン"
}

9、終わり

後は4で得たクライアントIDとクライアントシークレット、
そして8で得たリフレッシュトークンの計3つを用意すれば
アクセストークンを毎回発行できるので、これをアプリの処理に組み込めば
自動的にOAuth2.0でログインする処理をアプリに実装できる
(Ruby上での処理方法を後日公開するかも)

参考URL

https://www.eisbahn.jp/yoichiro/2011/10/oauth2-0_google-api.html
https://www.eisbahn.jp/yoichiro/2012/05/google_oauth2_web_server_profile_refreshtoken.html
http://tagamidaiki.com/ruby-google-drive-api-accesstoken/