Spring Security | Spring Securityとは | 認証(Authentication)と認可(Authorization)
認証(Authentication)とは?
認証とは、本人であると主張する人の身元を確認する手続きです。クライアントが、主張しているユーザー本人であるかを確認します。
認証には次の種類があります。
- クレデンシャルベース認証
- Webで使用される認証方式の多くは、クレデンシャルベースです。
- 権限を付与する前に認証処理が必要で、通常はユーザー名とパスワードを入力し、保存された情報と一致するか確認します。
- Spring Securityでは、一般にIDをprincipal、パスワードをcredentialと呼びます。
- 二要素認証
- 2つの方式で認証することを意味します。
- たとえば金融機関や銀行のWebアプリケーションでオンライン取引を行う場合、ログインとセキュリティ証明書の両方で認証することがあります。
- 認証要素を1つ追加するだけに見えますが、プログラム上の変更範囲は広くなります。
- 物理認証
- Webの領域外ですが、最も効果的なセキュリティ手段の一つです。
- たとえば、コンピューターの起動時に指紋を認識させる方法や、物理キーを挿入する方法があります。
認可(Authorization)とは?
- 認可とは、目的の場所へのアクセスや必要な情報の取得を許可する処理です。
- クライアントが実行しようとしている操作が、そのクライアントに許可されているかを確認します。
認可は大きく2種類に分けられます。
- 付与された権限(Granted Authority)
- ユーザーが適切な手順で認証されたら、権限を付与します。
- 会員登録などで永続的な権限を付与した場合、その権限をどこかに保存する必要があります。
- ユーザーがログインしてもメインページに移動できない場合は、認可に問題があります。
- リソースのインターセプト
- ユーザーに権限があるだけでは十分なセキュリティにはなりません。権限のないユーザーがリソースへアクセスできないよう、最初から防ぐ必要があります。
- 適切な権限を持つユーザーだけがリソースへアクセスできるように外部リクエストを遮断することは、Webセキュリティと認可の中心的な原則です。
認証と認可の違い
- 認証と認可は区別しにくい場合があります。
- 認証後に、認証されたユーザーへ特定の権限を付与すると考えると理解しやすくなります。
- たとえばACL(Access Control List)では、ユーザーのアクセスレベルに応じて、認証後にアクセス可能な範囲を制限できます。