【おーおーす】

OAuth とは?

💡 パスワードを渡さずに「鍵の一時貸し」をする仕組み
📌 このページのポイント
OAuth 2.0 認証フロー 👤 ユーザー アプリ (クライアント) 例: Webアプリ 認可サーバー (Authorization) 例: Google, GitHub リソースサーバー (保護されたAPI) ①ログイン ②認可要求 ③同意画面を表示 → ユーザーが許可 ④認可コード ⑤トークン要求 アクセストークン ⑥発行 ⑦APIアクセス ⑧データ返却 ユーザーのパスワードをアプリに渡さずに、安全にリソースへアクセスできる
OAuthはパスワードを共有せずに第三者アプリへ権限を委譲する仕組み
ひよこ ひよこ

OAuthって何を解決するの?

ペンギン先生 ペンギン先生

例えば写真印刷サービスがGoogleフォトにアクセスしたい場合、昔はGoogleパスワードを印刷サービスに教える必要があった。OAuthなら「Googleフォトの閲覧だけ許可」というアクセストークンを渡すだけ。パスワードを教えなくていいし、権限も必要最小限にできるんだ

ひよこ ひよこ

認証と認可の違いは?

ペンギン先生 ペンギン先生

認証(Authentication)は「あなたは誰?」を確認すること。認可(Authorization)は「何をしていい?」を許可すること。OAuthは認可の仕組み。「Googleでログイン」で認証もしているように見えるけど、認証部分はOAuth上に構築されたOpenID ConnectOIDC)が担当しているんだよ

ひよこ ひよこ

アクセストークンって何?

ペンギン先生 ペンギン先生

OAuthで発行される「一時的な通行証」だよ。有効期限があり、特定のスコープ(権限範囲)に限定される。期限切れにはリフレッシュトークンで新しいアクセストークンを取得する。トークンが漏洩しても被害を限定できるのがパスワード直接共有より安全な理由だね

ひよこ ひよこ

実装時の注意点は?

ペンギン先生 ペンギン先生

①PKCE(Proof Key for Code Exchange)を使う(認可コード横取り攻撃対策)、②stateパラメータCSRF対策、③リダイレクトURIを厳密に検証、④アクセストークンはフロントエンドに露出させない(BFFパターン推奨)。OAuthは仕様が複雑で実装ミスが脆弱性に直結するから、ライブラリを使うのが鉄則だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「OAuth」って出てきたら「パスワードを渡さずにアクセス権限を委譲する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Open Authorization」 = オープン認可
💬 Open(開かれた)Authorization(認可)の略。認「可」であって認「証」ではないのがポイントだよ
← 用語集にもどる