認可(ログイン後の権限)— 「何をしてよいか」を決める

概要 — まず全体をつかむ

認証で「誰か」が分かった次は、認可。「その人が何をしてよいか」を決めます。

詳細 — 1段階ずつ追う

これは何をする係?

入館証(認証)を持っていても、入れる部屋は役職によって違いますよね。それが認可です。操作の前に「この人にこの権限があるか」を確認し、なければ断ります(※1 403)。

アニメーション『認証と認可の違い』を開く
認証と認可 — 順にくぐる2つの門別々のチェック。①で本人確認 → ②で権限確認あなたアクセスしたい人認証OKなら次の門へ認証Authenticationあなたは誰?身分証で本人確認する確認に使うものパスワード/パスキー認可Authorization何をしてよい?権限で可否を判定する判定に使うものロール(役割・権限)✓ 操作を実行許可された範囲で✗ 認証で拒否(401)そもそも本人確認できず✗ 認可で拒否(403)本人だが、その権限がない認証=誰か(本人確認)/認可=何ができるか(権限)。認証を通っても、管理者ページのように権限がなければ弾かれる

登場人物メモ:

  • ※1 403(権限なし) — 本人だが、その操作は許されていない
  • ※2 ロール(役割) — 「管理者」「一般」など、権限のまとまり
この部分をもっと深く(中級

権限の決め方には代表的な2方式があります。

  • RBAC(ロールベース) — 「管理者・編集者・閲覧者」などロールに権限を束ね、利用者に割り当てる
  • ABAC(属性ベース) — 部署・所有者・時間帯などの属性で、より細かく判断する

登場人物メモ:

  • ※1 スコープ — トークンに載る「できる操作の範囲」(OAuth)
  • ※2 所有者チェック — 「そのデータの持ち主か」を確認すること
アニメーション『RBAC(ロールで権限を束ねる)』を開く
利用者ロール権限佐藤鈴木田中管理者編集者閲覧者削除できる編集できる閲覧できる割り当て上位ロールは下位の権限も含むロールに権限をまとめ、利用者にロールを割り当てる

仕事の流れ

  1. ログイン済みの人が、ある操作をしようとする
  2. サーバが「この人(の役割)に、この操作の権限があるか」を確認する
  3. あれば実行、無ければ拒否(403)
この部分をもっと深く(中級
  1. 認証で「誰か」を特定する
  2. リクエストのたびに ポリシー評価(ロール/属性/所有者)
  3. サーバ側で許可・拒否を判断する(クライアントの制御は飾りに過ぎない)
  4. 拒否なら 403 を返す

認証との違い&最小権限

  • 認証と認可は別 — 認証=「誰か」、認可=「何してよいか」。ログインできても、できることは人による
  • 最小権限 — 仕事に必要な分だけ権限を渡す。万一奪われても被害を小さくできる
この部分をもっと深く(中級
  • RBAC vs ABAC — まずRBAC、細かい制御が要ればABACを足す
  • 垂直と水平 — 垂直=上位権限への昇格を防ぐ/水平=他人の同種データへの越境を防ぐ
  • スコープで範囲を絞る — OAuthではトークンのスコープで「できる操作の範囲」を限定する(※1)
  • 最小権限 — 既定は拒否(deny by default)、必要な分だけ許可
  • サーバで必ず確認 — 画面でボタンを隠すのはUXであって認可ではない

⚠️ うまくいかないとき

  • 認可漏れ — チェックを忘れ、他人のデータが見えてしまう(重大事故の定番)
  • 権限昇格 — 一般利用者が管理者の操作をできてしまう
この部分をもっと深く(中級
  • IDOR — IDを差し替えるだけで他人のデータにアクセスできる(所有者チェック漏れ)
  • 認可漏れ — 一部のAPIだけチェックを忘れる
  • 権限昇格 — ロールや属性の判定ミスで上位操作ができてしまう

関連する知識

理解度チェック

そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。

1. 「ログインはできるのに、他人の投稿を消そうとしたら断られた」。これは?

2. 認可(Authorization)が決めているのは?

3. 「管理者」「一般」などの権限のまとまり(役割)を何と呼ぶ?

4. 「仕事に必要な分だけ権限を渡す(最小権限)」ことの利点として最も適切なのは?

5. 「権限昇格」の説明として正しいのはどれ?

6. 次のうち「認可」ではなく「認証」の仕事はどれ?

7. 権限がない操作をしたとき、サーバが返す代表的なHTTPステータスコードを3桁の数字で答えてください。

8. 「仕事に必要な最小限の権限だけを与える」という原則を、漢字4文字で何と呼ぶ?