iris

OAuth2.0 について


業務で触れる機会があったので、OAuth 2.0について振り返ります

OAuth2.0 は外部アプリケーションに対して、ユーザーデータへの限定的なアクセスを許可する認可フレームワークのこと.

Google や LINEのアカウントを利用して別のサービスにログインする仕組みが該当します.

登場人物

リソースオーナー: resource owner

保護対象のリソース(例: ユーザーデータ)の所有者.

リソースサーバー: resource server

保護対象のリソースを管理・提供するサーバー.

クライアント: client

リソースオーナーの許可を得てリソースサーバーにアクセスするアプリケーション

RP(Relying Party)とも呼ばれます

認可サーバー: authorization server

リソースオーナーの認証や許可を管理し、クライアントにアクセストークンを発行するサーバー

IdP(Identity Provider)とも呼ばれます

大まかな流れ

リソースオーナーが使用するアプリケーションが外部サービスのリソースを利用する際、以下の流れが発生します

  1. アクセス許可のリクエスト
    リソースオーナーが、アプリケーションにリソースのアクセスを許可

  2. 認可コードの送信
    外部サービス(認可サーバー)は、許可を確認後、アプリケーションに認可コードを送信

  3. アクセストークンの取得
    アプリケーションは認可コードを使い、外部サービスにアクセストークンを発行依頼

  4. リソースへのアクセス
    アプリケーションは取得したアクセストークンを利用して、外部サービスのリソースにアクセス

流れを図にしました.

発行されたアクセストークンは、リソースオーナーが許可した範囲のデータにのみアクセス可能です.

新しいリソースにアクセスする場合は、再度認証・認可のフローを通す必要があります.

Ruby で実装する時に便利な Gem

OmniAuth と Doorkeeper という便利なGemが用意されています。

OmniAuth

赤枠部分(認可フローのクライアント側)を簡素化してくれます.

各プロバイダーに対応した Strategy が用意されており、これをセットで使うことで認証フローを簡単に実装できます https://github.com/omniauth/omniauth/wiki/List-of-Strategies

Doorkeeper

青枠部分(認可サーバーの構築)を簡素化してくれます.

認可サーバーを構築するために使用するもので、認可コードの生成やアクセストークンの発行などの処理を簡単に実装できます

次回は CSRF について復習します!!