【セキュリティ】認証・認可の概念をサクッと理解する
はじめに
Webアプリケーションを開発していると、認証(Authentication)と認可(Authorization)という言葉に頻繁に出会います。一見似ているように感じるこの2つの概念は、それぞれ異なる役割を持っています。
しかし、特にプログラミングやセキュリティの学習を始めたばかりの人にとっては、その違いが曖昧になってしまうことも多いのではないでしょうか。
この記事では、初心者にも理解しやすいように、認証と認可の意味と役割の違いを解説していきます。
全体像
※https://sokowaku.com/blog/12086 より画像引用
認証とは「あなたは誰か」を確認すること
認証とは、アクセスしようとしているユーザーが本当にそのユーザーであるかを確認するプロセスです。簡単に言えば、「あなたが誰であるかを証明してください」とシステムが問いかけて、それに対してユーザーが情報(IDやパスワードなど)を提供するという流れです。
例えば、ログインフォームにメールアドレスとパスワードを入力してログインする場面を想像してみてください。このとき、システムは入力された情報が事前に登録されているものと一致するかどうかを確認します。一致すれば、そのユーザーは「本人である」と見なされてログインが成功します。これが認証のプロセスです。
なお、最近ではパスワードだけでなく、顔認証や指紋認証、2段階認証(2FA)など、より強力な方法で認証を行なうケースも増えています。
いわば、認証とは本人確認なのです。
認可とは「あなたに何ができるか」を制御すること
認可とは、認証が成功したユーザーがどのような権限を持っているのかを判断し、それに応じてシステムの機能やデータへのアクセスを制御するプロセスです。
例えば、ある社員がログインに成功したあと、「管理者専用のページ」にアクセスしようとしたとしましょう。
このとき、システムはその社員が管理者であるかどうかをチェックし、管理者権限があればページを表示し、そうでなければ「アクセス禁止」のエラーメッセージを表示します。このアクセス制御の仕組みが「認可」です。
つまり、認証が「あなたは誰か」を確かめるのに対して、認可は「あなたは何ができるか」を決めるものです。認証の結果によって、認可の判断が行われるという関係にあります。
認証だけでは安全とは言えない
初心者が陥りがちな誤解の一つに、「ログインに成功すれば、あとは全部使っても大丈夫」と考えてしまうことがあります。しかし、それではセキュリティ的に不十分です。
認証によってユーザーの身元がわかったとしても、そのユーザーがどの範囲まで操作できるのかを適切に制限しなければ、たとえば一般ユーザーが管理者向けの機能を使えてしまうような危険な状況が生まれてしまいます。
そのため、認証と認可はセットで考える必要があるのです。
まとめ
認証(Authentication)と認可(Authorization)は、Webアプリケーションのセキュリティを考えるうえで基本となる考え方です。
-
認証:「あなたは誰か」を確認するプロセス
-
認可:「あなたに何が許されているか」を判断するプロセス
この2つを混同せずに正しく理解し、必要に応じてしっかり実装していくことが、安全で信頼性の高いアプリケーションにつながります。
まずログイン処理の裏側で「認証」が行われていることを理解し、その後で「このユーザーがこの操作をしていいのか?」という視点で「認可」の設計を考えてみるとよいでしょう。
最後までお読みいただき、ありがとうございました。
参考URL
Discussion