認証は「あなたは誰ですか」を確認すること。認可は「その人は何をしてよいですか」を確認すること。
ログインできた後でも、すべての画面や操作が使えるとは限りません。
認証は本人確認
認証は、利用者が誰なのかを確かめる処理です。メールアドレスとパスワード、パスキー、二段階認証のコードなどを使い、サービス側が「この人は登録済みの本人だ」と判断します。
ログイン画面で成功すると、アプリはその人のユーザー情報を扱えるようになります。ここで分かるのは、まず「誰か」です。
本人かどうか、どのユーザーとして扱うか。
ログイン、パスキー、二段階認証、メール確認。
ユーザーIDやプロフィールなど、本人にひもづく情報が分かる。
認可は権限確認
認可は、認証済みの人が、どの画面や操作を使ってよいかを確認する処理です。日本語では「許可」や「権限チェック」と言うとイメージしやすいです。
たとえば同じサービスにログインしていても、一般ユーザーは自分のプロフィールを編集できる一方で、管理者設定は開けないことがあります。この「できる・できない」を分けるのが認可です。
そのユーザーが、対象の画面や操作を使ってよいか。
管理画面、チームデータ、課金プラン別機能、編集権限。
許可なら表示や実行、拒否ならエラーや別画面へ案内する。
順番は認証から認可へ
Webアプリでは、多くの場合、先に認証で「誰か」を確認し、その後に認可で「何をしてよいか」を確認します。誰か分からないままでは、その人にどんな権限があるかも判断できないためです。
ただし、画面を開くたびにパスワードを聞くわけではありません。ログイン後はセッションやトークンを使い、リクエストごとに本人情報と権限を確認していきます。
エラーの意味も変わる
認証と認可を分けて考えると、エラーの意味も整理しやすくなります。ログインしていない、または本人確認に失敗した場合は、認証の問題です。
一方、ログインはできているのに管理画面へ入れない場合は、認可の問題です。「あなたは誰か」は分かっているけれど、「その操作は許可されていない」という状態です。
ログインしていない、パスワードが違う、トークンが無効。
ログイン済みだが、対象の画面や操作を使う権限がない。
ログイン案内なのか、権限不足の案内なのかを分ける。
ここまでのまとめ
認証は、利用者が誰なのかを確認する処理です。認可は、確認済みの利用者が、どの範囲まで使ってよいかを判断する処理です。
認証は「本人確認」、認可は「権限確認」。ログインできることと、すべてを操作できることは別に考えます。
このUIを実装してみよう