【おーおーすにーてんぜろふろー】

OAuth 2.0フロー とは?

最終更新:
💡 アプリに権限を渡すまでの、手順の選び方

OAuth 2.0で、アプリがAPIを使うためのアクセストークンを得る手順。利用者に許可を求める場合や、サーバー同士で連携する場合などに応じて使い分ける。

📌 このページのポイント
認可コードを交換して、APIを使うアプリクライアント認可サーバー① ブラウザで認証・許可へ② 認可コードでアプリへ戻る③ コード+PKCEの元の値④ アクセストークンを受け取るAPI:トークンでアクセスログインの認証には、OIDCなどを使う
認可コード+PKCEの概略。①②はブラウザ経由、③④はトークン用の窓口との通信です。許可済みなら確認画面を省く場合もあります。
ひよこ ひよこ
OAuthのフローって、ログインの方法?
ペンギン先生 ペンギン先生
OAuth 2.0は、アプリにAPIを使う権限を渡すための仕組みだよ。フローは、そのためのアクセストークンを受け取る手順のこと。「誰がログインしたか」を確かめる認証は別で、OAuthを土台にしたOpenID Connect(OIDC)などを使うんだ
ひよこ ひよこ
認可コードの方式は、どんな流れなの?
ペンギン先生 ペンギン先生
アプリからブラウザを通して認可サーバーへ進み、必要な認証や許可の確認をするよ。アプリへ戻るときは、まず認可コードを受け取る。そのコードをトークン用の窓口に送って、アクセストークンと交換するんだ。許可済みなら確認画面を省く場合もあるよ
ひよこ ひよこ
PKCEを付けると何が変わる?
ペンギン先生 ペンギン先生
アプリが今回だけの秘密の値を作り、その値から計算した確認用の値を最初のリクエストで送るよ。コードを交換するときに元の値を示すので、コードだけを盗んだ相手による交換を防ぐ助けになる。S256という計算方式を使い、スマホアプリだけでなくWebアプリでも組み合わせるんだ
ひよこ ひよこ
いつも認可コードを使えばいい?
ペンギン先生 ペンギン先生
利用者の許可を受けるアプリでは有力な選択肢だよ。一方、秘密の認証情報を守れるサーバーが、自分に割り当てられた権限で連携するならClient Credentialsを使える。テレビなど入力やブラウザに制約がある機器では、別のスマホなどで許可するDevice Flowもある。対応方式を提供元で確認しよう
ひよこ ひよこ
古い方式や、更新用のトークンも気になるな
ペンギン先生 ペンギン先生
現在の安全指針では、応答でアクセストークンを直接渡すImplicit方式は避けるよう勧められ、利用者のパスワードをアプリへ渡すPassword方式は禁止されているよ。リフレッシュトークンは新しいアクセストークンを得るためのもので、必ず発行されるわけではない。権限を必要最小限にし、期限や保管・更新のルールも確認しよう
もっと詳しく知りたい人へ

PKCEがあればclient_secretは不要?

PKCEは認可コードの横取りや注入への対策であり、クライアント認証を置き換えるものではありません。秘密を守れるサーバー型のクライアントでは、必要なクライアント認証とPKCEを組み合わせます。秘密を守れない公開クライアントはPKCEが必須で、秘密を守れるクライアントにも利用が推奨されています。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「OAuth 2.0フロー」って出てきたら「アプリがAPIを使う権限を受け取るまでの手順」と思えばだいたいOK!
📖 おまけ:英語の意味
「OAuth 2.0 Flow」 = OAuth 2.0の処理の流れ
💬 誰が、どの方法で権限を受け取るかを決める手順だよ。用途とアプリの種類に合わせて選ぼう

参考資料

← 用語集にもどる