CodeBox CodeBox

【図解】ややこしいOAuth2.0を分かりやすく解説してみた

その他
けい

概要

GoogleやTwitter認証を実装する際に出てくる「OAuth」について図解で解説していきます。

OAuth2.0の登場人物は6人

OAuth2.0の流れを理解するには、下記6つの用語について理解する必要があります。



  • エンドユーザー:サービスを利用するユーザー
  • Webブラウザ:Google ChromeやSafariなどのブラウザ
  • クライアントアプリ:外部サービスを利用するアプリ。例えばRuby on RailsやReactなどを指します。
  • 認可サービス:サービスを提供するアプリ。例えばTwitterやInstagramを指します。
  • 認可エンドポイントの受付嬢:ブラウザからの認可リクエストを受け付ける場所。認可サービスのなかに存在。
  • トークンエンドポイントの受付嬢:クライアントアプリからのトークンリクエストを受け付ける場所。認可サービスのなかに存在。


では、認可サービスについてもう少し詳しく見てみましょう。
例えば皆さんがRailsであるアプリを作成して、Twitterによる認証機能を付けたいとします。

Rails(クライアントアプリ)は、各ユーザーのTwitter情報(ID名やアカウント名)など自力で入手することができません。
そのため、情報を持っているTwitterから情報を入手する必要があります。

このようにクライアントアプリに情報を与える外部のサービスを、認可サービスと呼びます。
今回は分かりやすく、認可サービスとリソースサービスを同じと考えます。

さて話を戻します。
エンドユーザーがあるサービスを見つけた場合を想像してください。


最近のアプリケーションなら、メールアドレス以外にGoogleやTwitterアカウントでログインできるようになっていますよね。さて、ユーザーがTwitterでログインをクリックしたとしましょう。

Webブラウザが認可リクエスト画面を表示

ユーザーがボタンをクリックすると、クライアントアプリがWebブラウザに「認可リクエスト」を表示するように命令します。



これによりWebブラウザで表示されるのが、「認可リクエスト画面」です。

例えばTwitterアカウントでログインすると、下画像のようにユーザーに許可を求める画面が表示されますよね。


ちなみに認可リクエスト(認可リクエスト画面表示時のURL)は下記のようになっています。
Twitterでのログインをする際に、URLをチェックしてみるとイメージがわくと思います。



Webブラウザが認可レスポンスを入手

次にユーザーが認可を許可したとします。
そうするとWebブラウザは認可サーバーに、「認可レスポンス」を求めます。

認可レスポンスの受付は、認可サーバーの「認可エンドポイント」で行います。
この認可エンドポイントにアクセスすることで、Webブラウザが認可レスポンスを受け取ることができるわけです。


さてWebブラウザが、認可サーバーから「認可レスポンス」を受け取ったら、それをクライアントアプリに渡します。


クライアントアプリトークンリクエストを投げる

認可レスポンスを受け取ったクライアントは、それをもとに認可サーバーにリクエストを投げます。その場合の受付は、「トークンエンドポイント」となります。

クライアントは、認可レスポンスと引き換えに、アクセストークンを手に入れます。



そしてトークンエンドポイントに下記の情報を含んだリクエストを投げます。



トークンエンドポイントから、クライアントは下記のような情報を入手します。
レスポンスの形式がJSONの場合、下記のような形になります。



このアクセストークンをもとに外部サーバーにアクセスできます。



これでようやく外部サービスを利用できるようになったわけです。



長かったですね...

ABOUT ME

けい
ベンチャーのフロントエンジニア。 主にVueとTypescriptを使っています。ライターのための文字数カウントアプリ:https://easy-count.vercel.app/