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)では、ユーザーのアクセスレベルに応じて、認証後にアクセス可能な範囲を制限できます。