認証と認可の違いを分かりやすくまとめてみる
サインアップやログイン周りの実装を行う際には、認証・認可の知識が必要になります。
今回は認証と認可の違いについてまとめてみました。
要点
先に結論を述べると、認証と認可は何を確認しているかという点で違いがあります。
認証: 「あなたは誰ですか?」 を確認
認可: 「あなたには、リソースにアクセスする権限がありますか?」 を確認
※リソース:情報自体や、情報を閲覧・編集する権利などのこと
もう少し詳しく
認証とは
認証は 「あなたは誰ですか?」 を確認することです。
例えば、次に挙げたものを確認することが認証です。
- What you are:相手自身の特徴を確認
例)指紋認証や顔認証 - What you have:相手が持っているものを確認
例)免許証やパスポート - What you know:相手が知っていることを確認
例)email と password
認可とは
一方、認可は 「あなたには、リソースにアクセスする権限がありますか?」 を確認することです。
例えば次のような事例が認可です。
- 家の鍵を持っているから、家に入ることができる
- バスの乗車券を持っているから、バスに乗ることができる
認証と認可の違い
認可で例示した「家の鍵を持っているから、家に入ることができる」ケースを考えると、認証と認可が異なる概念であることが分かります。
- その人は、家の鍵を持っていたので家に入ることができた(認可された)
- しかし、その鍵は奪ったものかもしれないし、一時的に借りたものかもしれない。
つまり、鍵を持っていたからといって、その家の住人であるとは限らない(認証はされていない)
一方、次のようなケースでは認証と認可を同時に行っています。
- パスポートは本人確認に用いられつつ(認証)、これにより渡航する権利を得られる(認可)
- 免許証は本人確認に用いられつつ(認証)、これにより自動車を運転する権利を得られる(認可)
日常生活に限らず、実際のサービスにおいても多くの場合、認証した上で特定の権限に対する認可を行うことになります。
例えば Facebook ログインができるサービスを思い出してみてください。そのサービスから Facebook にリダイレクトされ、そこで email / password を入力 (認証) 、その後「◯◯(サービス名) にプロフィールへのアクセスを許可しますか?」のような文言が表示され「許可」ボタンを押す (認可) 。このような流れで利用しているはずです。
認証と認可は異なるものですが、密接に関わり合っているのです。
まとめ
今回は認証と認可の違いについてまとめてみました。
認証・認可周りを開発していく上で、両者の違いを理解しておくことはとても大切だと思います。
この記事が理解の助けになれば幸いです。
補足
英語と省略表記について
認証と認可、同じような日本語ですが、実は英語も似ています。
- 認証:Authentication、AuthC や AuthN と略されることも
- 認可:Authorization、AuthZ と略されることも
HTTP Status Codes の 401, 403について
HTTP Status Codes の 401 と 403 は、それぞれ認証・認可の失敗を意味しています。
- 401 Unauthorized
- (認可のような名前をしており紛らわしいですが、、) 認証の失敗を意味しています
- つまり「このリクエストを通すためには認証を完了させてください」というメッセージ
- 403 Forbidden
- 認可の失敗を意味しています
- つまり「認証はしました。だけどあなたにはリクエストを通すための権限がありません」というメッセージ
内容に間違いがあれば、コメントでご指摘いただけると嬉しいです。
いいね、フォローもぜひお願いします 🐳🐣🐙
Discussion