理論編:認可の概要と実現方法を理解しよう
ユーザーに権限を与えることを認可といいます。 認可によって、ユーザーごとに実行可能な処理を制限できるようになります。
このレクチャーでは、認可の概要と実現方法を解説します。 認可の実現方法にはどのような方法があるのか、また、それぞれの方法にどのような特徴があるのかを理解しましょう。
目次
認可とは
認可とは、認証されたユーザーに対して権限を与えることです。 現実のアプリケーションにおける認可の例は次のようなものがあります:
- YouTube で認証されたユーザーは、動画のアップロードやコメントの投稿ができる
- 給与管理システムで、人事部のユーザーは社員の給与を閲覧できる
認可の実現方法
認可は次のような方法で実現できます:
- ユーザーによって、HTTPリクエスト(メソッドとURLの組)を制限する
- ユーザーによって、特定の Java メソッドの実行を制限する
- ユーザーによって、画面上の動線を非表示にする
認可の実現方法の例
例として、社内掲示板アプリケーションを例に考えてみましょう。 このアプリケーションには、
- 管理者ユーザーがお知らせを投稿し
- 一般ユーザーは投稿されたお知らせを閲覧できます
という仕様です。権限をまとめると次のようになります:
ユーザー種別 | お知らせの閲覧 | お知らせの投稿 |
---|---|---|
一般ユーザー | 可能 | 不可 |
管理者ユーザー | 可能 | 可能 |
このとき、認可を実現する方法は次のようになります:
- HTTP リクエストを制限する
- お知らせの投稿は
POST /notifications
というリクエストとする。このリクエストは管理者ユーザーのみが実行できるようにする
- お知らせの投稿は
- Java メソッドの実行を制限する
- お知らせの投稿は
NotificationSerivce.create()
というメソッドで処理される。このメソッドは管理者ユーザーの場合のみが実行されるようにする
- お知らせの投稿は
- 画面上の動線を非表示にする
- お知らせの投稿画面に遷移するための「お知らせ作成」ボタンを管理者ユーザーだけに表示する
認可の実現方法の選択
厳密な認可を実現するには、HTTP リクエストを制限する方法が最も適しています。 逆に「動線を表示しない」方法は厳密な認可を実現するには不適切です。
「導線を表示しない」方法では、ユーザーが直接 URL を入力して画面に遷移することを防ぐことができません。 例えば、お知らせ作成画面の URL が
https://example.com/notifications/new
となっている場合、この URL を知った一般ユーザーはURLをブラウザに直接入力することで本来アクセスできないはずの画面を閲覧できてしまいます。 社内のチャットやメーリングリストなどにこの URL が投稿され、ユーザーがURLを知ってしまうケースがあり得るため、この方法は厳密な認可を実現するには不適切と言えます。
また、リソースに連番を発番しているシステムの場合、適当にURLを変更することで本来アクセスできてはいけない画面に遷移することができてしまう場合があります。 例えば、給与管理システムで自分の給与明細を確認する画面の URL が
https://example.com/salary/1
となっている場合、ユーザーはこの URL を
https://example.com/salary/2
に変更することで他の社員の給与明細を閲覧することができてしまいます。
このように、画面上の動線を非表示にする方法は厳密な認可を実現するには不適切です。 代わりに、HTTP リクエストを制限する方法を選択しましょう。
まとめ
このレクチャーでは、認可の概要と実現方法について紹介しました。
- 認可とは、認証済みユーザーに権限を与えることである
- 認可の実現方法には次のような方法がある
- HTTPのリクエストを制限する
- Javaメソッドの実行を制限する
- 導線を非表示にする
- 導線を非表示にする方法はURLが分かると画面に遷移できてしまうため、厳密な認可を実現するには不適切である
それぞれの実現方法の特徴を理解し、適切な実装をするようにしましょう。