🔐

アプリ間の連携ってどうやってるんだ?OAuth2.0の仕組みをざっくり理解する

2024/09/21に公開

はじめに

認可基盤の開発に関わる機会があったので、OAuth2.0の仕組みを理解するために調べたことをまとめました。
私はセキュリティについての知識がかなり浅いので、誤った情報が含まれているかもしれません。もし間違いがあれば教えていただけると幸いです!!!

アプリ間の連携

みなさん、こんな画面見たことないですか??

これはconnpassの画面ですが、「GitHubと連携」をクリックすると、GitHubの画面に飛びます。

この画像では、connpass側がGitHubのuserのメールアドレス情報をreadする権限を求めていることがわかります。
このように、アプリケーション間でユーザー情報を共有するための仕組みに使われているのがOAuth2.0です。

OAuth2.0とは

OAuth2.0は、異なるアプリケーション間でユーザー情報を共有するための認可フレームワークです。
ユーザーが自分のパスワードなどの認証情報を第三者アプリケーションと共有することなく、自分のデータや機能へのアクセスを許可できます。

認証と認可

まず、認証(Authentication)認可(Authorization) の違いを押さえておきます。

  • 認証: ユーザーが誰であるかを確認するプロセス。例として、ユーザー名とパスワードを入力してログインするなどがあります。
  • 認可: ユーザーがどのリソースや機能にアクセスできるかを決定するプロセス。

OAuth2.0は主に認可を扱うプロトコルであり、ユーザーの認証自体は他の方法で行われます。(例:OAuth2.0の拡張であるOpenID Connectでは認証も行える)

OAuth2.0の登場人物

connpassとGitHubの例で登場人物を4人紹介します。

  1. リソースオーナー(Resource Owner)
    • :ユーザー(あなた)
    • 役割:リソース(例:GitHubのプロフィール情報やメールアドレス)へのアクセス権を持つ主体
  2. クライアント(Client)
    • :connpass
    • 役割:リソースオーナーのリソースにアクセスするアプリケーション
  3. リソースサーバー(Resource Server)
    • :GitHubのAPIサーバー
    • 役割:リソースオーナーのデータを保管し、適切な認可が与えられたクライアントにそのデータを提供するサーバー
  4. 認可サーバー(Authorization Server)
    • :GitHubの認証・認可を管理するサーバー
    • 役割:リソースオーナーを認証し、クライアントにアクセストークンを発行するサーバー

OAuth2.0の流れ

OAuth2.0の流れはざっくり以下のようになります。

各ステップをざっくり説明

  1. ユーザーが「GitHubと連携」をクリック

    • ユーザー(リソースオーナー)がconnpass(クライアント)のウェブサイトで「GitHubと連携」ボタンをクリックします。
    • この操作により、connpassはGitHubの認可サーバーへの認可リクエストを開始します。
  2. connpassがGitHubの認可サーバーにリダイレクト

    • connpassはユーザーのブラウザをGitHubの認可エンドポイントにリダイレクトします。
    • この時、connpassが要求する権限(スコープ)やコールバックURLなどが含まれます。
  3. GitHub認可サーバーがログイン画面を表示

    • GitHubの認可サーバーは、ユーザーにログイン画面を表示します。
    • ユーザーはGitHubの認証情報を入力してログインします。
  4. ユーザーがアクセスを許可

    • ログイン後、GitHubはconnpassが要求した権限をユーザーに確認します。
  5. GitHubが認可コードをconnpassに返却

    • ユーザーがアクセスを許可すると、GitHubは認可コードをconnpassに返し、ユーザーをconnpassにリダイレクトします。
    • この時に先ほどのコールバックURLを使用します。
  6. connpassがアクセストークンをリクエスト

    • connpassは受け取った認可コードを使用して、GitHubの認可サーバーにアクセストークンをリクエストします。
  7. GitHubがアクセストークンを返却

    • GitHubの認可サーバーはリクエストを受け取り、情報が正しければアクセストークンをconnpassに返します。
    • アクセストークンは、リソースサーバーへのアクセスに使用されます。
  8. connpassがリソースサーバーからユーザー情報を取得

    • connpassは取得したアクセストークンを使用して、GitHubのリソースサーバーにAPIリクエストを送信します。
    • 画像の例では、GitHubのメールアドレスを取得しています。
  9. connpassがサービスを提供

    • 取得したユーザー情報を使用して、connpassとGitHubの連携が完了し、connpassが提供するサービスをユーザーに提供します。

まとめ

OAuth2.0の仕組みをざっくり説明していくことで、自分の理解を深めることができました!
この記事がOAuth2.0の理解に少しでも役立てば幸いです!

参考記事

GitHubで編集を提案

Discussion