oauth2 gem による認可フロー

まずはOAuth2::Client.newでクライアントを生成します。その際に Google 側で登録したクライアントのclient_idclient_secret、その他のパラメータを渡します。

クライアントの生成を単ファイルに切り出しているのは、Authorization Code 取得 URL を出力する部分と Sinatra でリダイレクトを受け取るプロセスの両方から使えるようにするためです。以下に図を再掲します。

oauth2

作成した Client を使い、Authorization Code をリクエストします(1)。

出力される URL にブラウザでアクセスすると(2)(この時点で自分自身はリソースオーナーとして振舞っています)、Google アカウントへログインしたあと、下のような画面でリソースへのアクセスを許可するかどうかの確認を求められます(3)。

al

ここで "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 形式で落としてくることができました。

xx

以上で OAuth 2.0 の紹介は終わりです。OAuth 2.0 は広く使われているため便利なライブラリに隠されてしまいがちですが、一度中で何が行われているのかをじっくり追いかけてみると応用が効くようになり、様々なサービスの API で楽しく遊べます。



※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。