Google APIのOAuth2に関連したトークンの扱い方法とシーケンス

概要

  • 上記のシーケンスはシンプルすぎて、重要なシーケンスとアクターが漏れているので、もう少し細かくシーケンス図を書き直しました。
  • 特に、refresh tokenの取得方法と、取得タイミング、保存タイミングなどの情報がアプリケーション開発者がアプリケーションを設計する上で重要なのですが、オフィシャルドキュメントでは網羅されていませんでした。

シーケンス図

用語の整理

  • authorization code
    • 認証コード
    • これを元に、refresh tokenaccess tokenを交換する。取得したらauthorization codeは無効になる。
    • ユーザが承認した直後にしか使わない。
    • expireする。Googleでは時間の記載は無いけど、Facebookでは10分
    • 4番のシーケンスにおける、code パラメータで取得出来る。。
  • access token
    • API呼び出しに使うトークン。
    • レスポンスを見ていると、Googleでは3600秒(=60分)でexpireするトークンが発行されている。
  • refresh token
    • 基本的には、アプリケーション側で永続化しておく。
    • expireはしない。ユーザ側でrevokeできる。
    • 無効になってしまったらauthorization codeから生成する必要がある。そのために、ユーザに再び承認をもらう必要がある。この時点ではauthorization codeは存在していないはずなので。
    • 大事に保存しておく必要がある。このcredentialとアプリ情報が第三者に漏れると、権限を乱用出来てしまう。
    • 漏れた場合は、Googleに登録したアプリをのcredentialをリセットする必要があるので、他のユーザにも影響するため厳重に管理する必要がある。

メモ

  • expirationやトークンのライフサイクルに関してはこの辺りが情報ソース。
  • authorization tokenを再発行するためには、自分のGoogleのSecurity&Privacyページに手アプリの認証をrevokeする必要がある。
    • そうじゃないと、新しいaccess_tokenが発行されるだけで、認証情報はリセットされない。
    • アプリ側で生成する認証ページのURLのパラメータを変更したときには、revokeしなければ、前回と同じパラメータの認証情報のままaccess tokenなどが生成されてしまうので注意。

ソースコード

  • rubyのコードで主要なコードスニペットを書いておきます。
  • わかりやすいように値の例も書いておきます。

refresh tokenを取得できる、authorization codeを取得するコード。

authorization codeからrefresh tokenaccess tokenを取得するコード。

refresh tokenを使って、access tokenを取得する。


matsubokkuri

Please feel free to contact me via e-mail, twitter and facebook!

あわせて読みたい

コメントを残す