こう 聞かれます
- 「認証と
認可の 違いを 説明してください」 - 「ログインしている
人なら、 どの データでも 見せて よいですか」 (認可を 忘れていないかを 確かめる形) - 「401 と 403 は
どう 使い 分けますか」
面接官が 見ている点
- 2 つを
「誰か」と 「何をしてよいか」に 分けて言えるか - ログインの
確認だけで 守った つもりにならず、 データごとに 持ち主を 確かめる 意識があるか - 画面で
ボタンを 隠すだけでなく、 サーバーで 確かめる 必要を 分かっているか
短い答え
- 認証は
「あなたは誰か」を 確かめる ことで、 ログインで パスワードなどを 照らすのが これに 当たります。 - 認可は
「その 人が 何を して よいか」を 決める ことで、 ほかの 人の 注文を 見られないように するのが これに 当たります。 - 認証に
失敗したら 401、 誰かは 分かったが 許されていない 操作なら 403 を 返すのが 基本です。
少し 詳しい答え
順番と置き場所
先に
よくある穴
たとえば /orders/15 の 15 を 16 に
画面で
401 と 403
- 401 正しい
認証の 情報が 無い、 または 足りない ときに返します - 403 相手が
誰かは 分かったうえで、 その 操作を 断る ときに返します - データが
ある ことさえ 知られたくない ときは、 403 の 代わりに 404 を 返すこともあります
作った
よく ある間違い
- 「ログインしていれば
安全」と言う ログインで 分かるのは 誰かだけです。 他人の データに 触れないかは、 認可で 別に 確かめます - 画面で
隠せば 守れると考える 要求は 画面を 通さずに 送れます。 確かめは サーバーで行います - 401 と 403 を
逆に覚える 401 は 「誰か分からない」、 403 は 「誰かは 分かるが 許さない」です
深掘りの問い
- 「他人の
データを 見られる 穴を、 テストで どう 見つけますか」別の 人の アカウントで 同じ API を 呼び、 断られる ことを 確かめる テストを 置く、と答えます - 「管理者だけの
画面は どう 守りますか」 役割を サーバーで 持ち、 管理者の 操作の 入口ごとに 役割を 確かめる、と答えます - 「認証の
情報は どう 保ちますか」 セッションの Cookie や トークンで、 ログインの あとの 要求に 誰かを 載せる、と答えます