認証 vs 認可
「認証」と「認可」は似ているようで全く違う概念です。 OAuth と OIDC を理解するうえで、この違いを正確に把握することが重要です。
認証 (Authentication) - あなたは誰?
認証とは、「あなたが本当にあなたであること」を確認するプロセスです。 身分証明書を見せて本人確認をするようなものです。
パスポートを見せる: 空港で「私は田中太郎です」と証明する
ログインする: ID とパスワードで「私はこのアカウントの持ち主です」と証明する
指紋認証をする: 生体情報で本人であることを証明する
認可 (Authorization) - 何ができる?
認可とは、「あなたが何をする権限を持っているか」を決定するプロセスです。 入場許可証やチケットのようなものです。
映画のチケット: 特定のスクリーンの特定の席に座る権限
社員カード: 特定のフロア・部屋に入る権限
管理者ロール: システム設定を変更する権限
身分証明書 vs 入場許可証
# コンサート会場での例え
[認証] 身分証明書を見せる
→ 「この人は田中太郎さんです」
→ 本人確認完了
[認可] チケットを見せる
→ 「A席のVIPエリアに入れます」
→ 権限確認完了
# 認証と認可は独立している
- 身分証明書があっても、チケットがなければ入場できない
- チケットがあっても、本人でなければ使えない
| 認証 (Authentication) | 認可 (Authorization) | |
|---|---|---|
| 問い | あなたは誰? | 何ができる? |
| 例え | 身分証明書 | 入場許可証 |
| 結果 | ユーザーの身元が判明 | 許可された操作が判明 |
| プロトコル | OpenID Connect (OIDC) | OAuth 2.0 |
OAuth = 認可、OIDC = 認証 + 認可
OAuth 2.0 は「認可」のためのプロトコルです。 「このアプリに写真へのアクセスを許可する」といった権限の委譲を扱います。 しかし、OAuth 2.0 だけでは「ユーザーが誰であるか」を知ることはできません。
そこで登場したのが OpenID Connect (OIDC) です。 OIDC は OAuth 2.0 の上に「認証」の機能を追加した拡張仕様です。 OIDC を使うと、認可に加えて 「このユーザーは田中太郎です」という身元情報も取得できます。
「このアプリに写真を見せてOK」
→ アクセストークンを発行
→ 権限の委譲のみ
ユーザーが誰かは分からない
「このユーザーは田中太郎です」
→ IDトークンも発行
→ 認証 + 認可
OAuth 2.0 を拡張した仕様