認証と認可の違いは何ですか

「誰か」を確かめるのが認証、「何をしてよいか」を決めるのが認可、と分けて答える問い。401 と 403 の使い分けと、他人のデータを見られる穴まで話します。

こう聞かれます

  • 「認証と認可の違いを説明してください」
  • 「ログインしている人なら、どのデータでも見せてよいですか」(認可を忘れていないかを確かめる形)
  • 「401 と 403 はどう使い分けますか」

面接官が見ている点

  • 2 つを「誰か」と「何をしてよいか」に分けて言えるか
  • ログインの確認だけで守ったつもりにならず、データごとに持ち主を確かめる意識があるか
  • 画面でボタンを隠すだけでなく、サーバーで確かめる必要を分かっているか

短い答え

  • 認証は「あなたは誰か」を確かめることで、ログインでパスワードなどを照らすのがこれに当たります。
  • 認可は「その人が何をしてよいか」を決めることで、ほかの人の注文を見られないようにするのがこれに当たります。
  • 認証に失敗したら 401、誰かは分かったが許されていない操作なら 403 を返すのが基本です。

少し詳しい答え

順番と置き場所

先に認証で相手を確かめ、そのあと要求ごとに認可で許すかどうかを決めます。認可は 1 回で終わりません。データを読む、直す、消す、の 1 つずつで「この人はこのデータに触ってよいか」を確かめます。

よくある穴

たとえば /orders/15 の 15 を 16 に変えると、他人の注文が見えてしまう作りがあります。ログインは確かめているのに、注文の持ち主が本人かどうかを確かめていないために起きます。直し方は、サーバー側で「この注文の持ち主はいまログインしている人か」を毎回確かめることです。番号を推測しにくい形に変えても、確かめの代わりにはなりません。

画面でボタンを出さないのは使いやすさのためで、守りにはなりません。要求は画面を通さずに直接送れるので、確かめは必ずサーバーで行います。

401 と 403

  • 401 正しい認証の情報が無い、または足りないときに返します
  • 403 相手が誰かは分かったうえで、その操作を断るときに返します
  • データがあることさえ知られたくないときは、403 の代わりに 404 を返すこともあります

作った物と結ぶなら、たとえば「メモのアプリで、メモを読む API はログインの確認に加えて、メモの持ち主がログイン中の人と同じかを確かめ、違えば 403 を返すようにした」のように話します。

よくある間違い

  • 「ログインしていれば安全」と言うログインで分かるのは誰かだけです。他人のデータに触れないかは、認可で別に確かめます
  • 画面で隠せば守れると考える要求は画面を通さずに送れます。確かめはサーバーで行います
  • 401 と 403 を逆に覚える 401 は「誰か分からない」、403 は「誰かは分かるが許さない」です

深掘りの問い

  • 「他人のデータを見られる穴を、テストでどう見つけますか」別の人のアカウントで同じ API を呼び、断られることを確かめるテストを置く、と答えます
  • 「管理者だけの画面はどう守りますか」役割をサーバーで持ち、管理者の操作の入口ごとに役割を確かめる、と答えます
  • 「認証の情報はどう保ちますか」 セッションの Cookie やトークンで、ログインのあとの要求に誰かを載せる、と答えます

確認日 2026年10月23日

技術面接問題の一覧へ戻る