OAuth2.0 について
業務で触れる機会があったので、OAuth 2.0について振り返ります
OAuth2.0 は外部アプリケーションに対して、ユーザーデータへの限定的なアクセスを許可する認可フレームワークのこと.
Google や LINEのアカウントを利用して別のサービスにログインする仕組みが該当します.
登場人物
リソースオーナー: resource owner
保護対象のリソース(例: ユーザーデータ)の所有者.
リソースサーバー: resource server
保護対象のリソースを管理・提供するサーバー.
クライアント: client
リソースオーナーの許可を得てリソースサーバーにアクセスするアプリケーション
RP(Relying Party)とも呼ばれます
認可サーバー: authorization server
リソースオーナーの認証や許可を管理し、クライアントにアクセストークンを発行するサーバー
IdP(Identity Provider)とも呼ばれます
大まかな流れ
リソースオーナーが使用するアプリケーションが外部サービスのリソースを利用する際、以下の流れが発生します
-
アクセス許可のリクエスト
リソースオーナーが、アプリケーションにリソースのアクセスを許可 -
認可コードの送信
外部サービス(認可サーバー)は、許可を確認後、アプリケーションに認可コードを送信 -
アクセストークンの取得
アプリケーションは認可コードを使い、外部サービスにアクセストークンを発行依頼 -
リソースへのアクセス
アプリケーションは取得したアクセストークンを利用して、外部サービスのリソースにアクセス
流れを図にしました.
発行されたアクセストークンは、リソースオーナーが許可した範囲のデータにのみアクセス可能です.
新しいリソースにアクセスする場合は、再度認証・認可のフローを通す必要があります.
Ruby で実装する時に便利な Gem
OmniAuth と Doorkeeper という便利なGemが用意されています。
OmniAuth
赤枠部分(認可フローのクライアント側)を簡素化してくれます.
各プロバイダーに対応した Strategy が用意されており、これをセットで使うことで認証フローを簡単に実装できます https://github.com/omniauth/omniauth/wiki/List-of-Strategies
Doorkeeper
青枠部分(認可サーバーの構築)を簡素化してくれます.
認可サーバーを構築するために使用するもので、認可コードの生成やアクセストークンの発行などの処理を簡単に実装できます
次回は CSRF について復習します!!
Tweet