ソフトウェア開発をしていると、認証 (Authentication) と 認可 (Authorization) という言葉がよく出てきます。 似たような文脈で使われるため混同しやすいのですが、役割ははっきり分かれています。
結論から言うと、この2つは次の違いです。
- 認証 (Authentication) : 「あなたは誰ですか?」を確認する
- 認可 (Authorization) : 「あなたは何をしてよいですか?」を決める
多くのシステムでは、認証 → 認可の順序で処理が行われます。
以下、それぞれについて整理しておきます。
認証 (Authentication)
認証は、ユーザーやシステムの身元を確認する処理です。
つまり、
この人は本当にそのユーザー本人なのか?
を確認する仕組みです。
例えばWebサービスのログインでは、ユーザーは次のような情報を入力します。
- ユーザーID
- パスワード
システムはそれをデータベースに保存されている情報と照合し、正しければ
このユーザーは確かに本人である
と判断します。
認証の結果として、システムは
- セッション
- トークン
などを発行し、そのユーザーがログイン済みであることを記録します。
認証の主な方法
認証の手段にはいくつか種類があります。
- ID + パスワード
- ワンタイムパスワード (OTP)
- 多要素認証 (MFA)
- OAuth / OpenID Connect
- 生体認証 (指紋・顔など)
いずれも目的は同じで、「本人確認」 です。
認可 (Authorization)
認可は、認証されたユーザーに対して何を許可するかを決める処理です。
つまり、
このユーザーはどの操作を実行してよいのか?
を判断します。
例えば、あるシステムに次のようなユーザーがいるとします。
| ユーザー | 権限 |
|---|---|
| 一般ユーザー | 自分のデータだけ閲覧できる |
| 管理者 | すべてのユーザーを管理できる |
同じシステムにログインしていても、
- 一般ユーザーは管理画面に入れない
- 管理者は入れる
といった制御が行われます。
これはすべて認可の処理です。
認証と認可の関係
多くのシステムでは、処理の流れは次の順序になります。
ユーザーアクセス
↓
認証 (Authentication)
「この人は誰?」
↓
認可 (Authorization)
「この人は何ができる?」
↓
アプリケーションの機能
まずユーザーの身元を確認し、その後で操作の許可範囲を決めるという流れです。
認証されていない状態では、通常は認可の判断を行うことすらできません。
例:ホテルで考える
この2つの違いは、ホテルの例で考えると理解しやすいです。
認証
ホテルのフロントで名前を確認される。
「あなたは宿泊者本人ですか?」
ここで本人確認が行われます。
認可
カードキーを渡される。
そのカードキーで開くのは
- 自分の部屋
- エレベーターの特定フロア
だけです。
これは
「あなたに許可されている範囲」
を示しています。
まとめ
認証と認可は、セキュリティ設計の基本的な概念です。
| 用語 | 意味 |
|---|---|
| 認証 (Authentication) | ユーザーの身元を確認する |
| 認可 (Authorization) | ユーザーに許可された操作を決める |
簡潔に言うと
- 認証 → あなたは誰?
- 認可 → 何ができる?
という違いになります。
多くのソフトウェアシステムでは、この2つを組み合わせることでアクセス制御を実現しています。