OAuth 2.0 Webサーバー認証の基本仕組みとフロー詳細解説

目次

はじめに

OAuth 2.0のWebサーバーフロー(認可コードフロー)は、Webアプリケーションがユーザーの代わりに安全にAPIへアクセスするための標準的な仕組みです。本章では目的と基本的な役割、流れの概観をやさしく説明します。

目的

ユーザーの資格情報(パスワード)をWebアプリ側で扱わずに、第三者のAPIへ安全にアクセスすることを目的とします。サーバ側でトークンを管理するため、ブラウザで秘密情報が漏れるリスクを減らせます。

登場人物(役割)

  • ユーザー:サービスを利用する人
  • クライアント(Webアプリ):ユーザーの代理でAPIを呼び出すサーバを持つアプリ
  • 認可サーバ:認証と認可を行い、認可コードやアクセストークンを発行するサービス
  • リソースサーバ:保護されたAPIを提供するサービス

流れの概観

  1. クライアントが認可サーバへリダイレクトし、ユーザーがログイン・同意を行います。
  2. 認可サーバは認可コードをクライアントのサーバへ返します。
  3. クライアントは認可コードを用いて認可サーバと直接やり取りし、アクセストークンを取得します。
  4. クライアントは取得したトークンでリソースサーバに安全にAPIを呼び出します。

次章で、上の流れを図や具体的な例でわかりやすく説明します。

フローの概要

概要

ユーザーがWebアプリ(クライアント)にアクセスすると、アプリは認可サーバー(例:GoogleやMicrosoft)へユーザーを送ります。認可サーバーでログインと許可を得ると、認可コードがアプリのコールバックURLに返されます。アプリはその認可コードを使ってアクセストークンを取得し、アクセストークンで保護されたAPIへアクセスします。

ステップ1:ユーザーのアクセス

ユーザーがアプリを開くと、アプリは認可要求を生成して認可サーバーにリダイレクトします。具体例:”Googleでログイン”ボタンを押すとGoogleの画面に移動します。

ステップ2:ログインと許可

認可サーバーでユーザーがログインし、アプリに与える権限を確認して承認します。ここで同意画面が表示されます。

ステップ3:認可コードの受領

ユーザーが承認すると、認可サーバーは事前に登録したコールバックURLに認可コードを返します。コードは短時間だけ有効な一時的な値です。

ステップ4:アクセストークンの取得

アプリはサーバー側で認可コードを受け取り、認可サーバーに対して認可コードとクライアント情報を送信してアクセストークンを取得します。

ステップ5:保護リソースへのアクセス

取得したアクセストークンをAPIリクエストのヘッダーに付けて、ユーザーのデータなど保護されたリソースにアクセスします。

注意点

認可コードは公開しないようにし、アクセストークンは安全に保管してください。コールバックURLは事前登録しておく必要があります。

主な特徴

機密情報の保護

クライアント(Webサーバー)がクライアントシークレットや秘密鍵を安全に保持します。秘密はサーバー内で管理するため、外部のブラウザや第三者のアプリに漏れにくく、全体としてセキュリティが高まります。具体例としては、サーバーの環境変数や専用のシークレット管理ツールに保存します。

ユーザー認証情報の扱い

ユーザーのパスワードや認証情報はクライアント側に渡りません。ユーザーは認可サーバーに直接ログインするため、信頼できないアプリに自分のパスワードを預ける必要がなく、安全に認証できます。

アクセストークンと有効期限

アクセストークンは一定期間で失効します。短めの有効期限にすると、不正利用のリスクを下げられます。たとえば数分〜数時間の設定が一般的です。トークンが失効すると、新しいアクセス権を得るには更新処理が必要です。

リフレッシュトークンでの更新

アクセストークンが期限切れのときは、リフレッシュトークンを使って新しいアクセストークンを取得できます。リフレッシュトークンはサーバー側で厳重に管理し、必要に応じてローテーションや取り消しを行います。

運用上のポイント

  • トークンはHTTPSでやり取りします。
  • スコープを限定して必要最小限の権限だけ与えます。
  • トークンのログや失効処理を実装して不正検知に備えます。

代表的な利用例

1. クラウドストレージ連携(例:Google Drive)

Webアプリがユーザーのファイルにアクセスするときに使われます。ユーザーはGoogleのログイン画面でアクセスを許可し、アプリはその許可を受けてファイル一覧やアップロードを行います。パスワードを共有せずに済むため安全で、ユーザー側の操作は簡単です。長時間使う場合は”リフレッシュトークン”で再認証を省けますが、安全に管理する必要があります。

2. 企業向けAPI連携(例:Microsoft Graph)

会社のメールやカレンダー、チーム連携を行うときに役立ちます。管理者がアプリに権限を与えたり、ユーザーごとに同意を取ったりして、必要なデータだけにアクセスします。シングルサインオン(SSO)と組み合わせると、社員は追加のパスワードを入力せずに業務ツールを使えます。

3. SNSアカウントでのログイン(例:Googleアカウントでログイン)

ユーザー登録やログインの手間を減らせます。既存のSNSアカウントで認証するため、メール確認やパスワード管理の負担が軽くなります。また、アカウント連携を通じてプロフィール情報を取得し、入力の手間をさらに減らせます。

4. Webアプリの認証・認可全般

セキュリティと使いやすさの両立を目指す場面で広く使われます。権限の範囲(スコープ)を限定して最小限のアクセスに抑え、トークンの有効期限を設けることで不正利用リスクを下げます。クライアント側に秘密情報を置かない、通信を必ずHTTPSにするなどの基本も重要です。

注意点

  • 必要な権限だけを求める(最小権限の原則)。
  • クライアント秘密情報やリフレッシュトークンは安全に保管する。
  • ユーザーがアクセスを取り消したときに対応する仕組みを用意する。

これらの例は多くのWebアプリで採用され、利便性と安全性のバランスが取れた実装法です。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次