oauth2 gem による認可フロー
まずはOAuth2::Client.new
でクライアントを生成します。その際に Google 側で登録したクライアントのclient_id
とclient_secret
、その他のパラメータを渡します。
クライアントの生成を単ファイルに切り出しているのは、Authorization Code 取得 URL を出力する部分と Sinatra でリダイレクトを受け取るプロセスの両方から使えるようにするためです。以下に図を再掲します。
作成した Client を使い、Authorization Code をリクエストします(1)。
出力される URL にブラウザでアクセスすると(2)(この時点で自分自身はリソースオーナーとして振舞っています)、Google アカウントへログインしたあと、下のような画面でリソースへのアクセスを許可するかどうかの確認を求められます(3)。
ここで "Accept" を選ぶと(4)、Authorization Code が発行され(5)、即座にブラウザはクライアントが待ち受けているはずの redirect_url
へリソースオーナーを導き...
Firefox can't establish a connection to the server at localhost:8080.
localhost:8080
で受け付けるプロセスを起動し忘れていました。下のコードを走らせて sinatra を 8080 番ポートで listen させ、もう一度 "Accept" します。
今度こそ https://localhost:8080/oauth2callback
へリダイレクトされます。渡されたパラメータにはAuthorization Code が含まれているので、あとはクライアントだけでサービスプロバイダとやりとりすることができます(7),(8),(9)。
リソースで遊ぶ - アクセストークンの用例
ここまでの OAuth 2.0 認可フローはどんなサービスでも共通ですが、アクセストークンを得たあとに必要となるリソース API はサービスによって千差万別で、各サービスのドキュメントを参照しながら利用していくことになります。そのため以下の Google Drive API はあくまで利用の一例であることに注意してください。
Google Drive REST API Overview | Drive REST API| Google Developers
Google Spreadsheet のデータを Excel 形式で落としてくることができました。
以上で OAuth 2.0 の紹介は終わりです。OAuth 2.0 は広く使われているため便利なライブラリに隠されてしまいがちですが、一度中で何が行われているのかをじっくり追いかけてみると応用が効くようになり、様々なサービスの API で楽しく遊べます。