Spring Security を始めよう:認証・認可とは?
Web アプリケーションでは、アクセスしたユーザーが誰であるかを特定し、ユーザーに対して適切な権限管理を行う必要があります。 このような機能を認証・認可といいます。
このレクチャーでは、認証・認可とはどのようなものかを説明します。 また、Spring Framework のエコシステムの中で、認証・認可の機能を提供する Spring Security についても紹介します。
目次
認証・認可とはなにか
Web アプリケーションでは、アクセスしたユーザーが誰であるかを特定し、ユーザーに対して適切な権限管理を行う必要があります。 このような機能を認証・認可といいます。
- 認証とは「本人確認」のことです。Web アプリケーションにアクセスしたユーザーが誰であるかを特定します
- 認可とは「権限管理」のことです。Web アプリケーションのユーザーに対して、どのような操作が許可されているかを管理します
認証・認可の種類
認証・認可にはさまざまな方式があります。
認証の方式
本人確認に使用する対象によって、以下のような認証方式があります。
- ユーザー名とパスワードによる認証
- メールアドレスやユーザーIDとパスワードを入力するよくある方式です
- 多要素認証 (MFA: multi-factor authentication)
- ユーザー名とパスワードに加えて、SMS で送られてきた認証コードを入力するなど、複数の要素を組み合わせて認証を行います
- パスキー認証
- 指紋認証・顔認証・PIN (Personal Identification Number) などを使用して認証を行います
認可の方式
何に対して権限管理をするかによって、以下のような認可方式があります。
- ロールベースアクセス制御 (RBAC: Role-Based Access Control)
- ユーザーに対してロールを割り当て、ロールごとにアクセス制御を行います
- 例えば、「Manager ロールが割り当てられたユーザーは、部下の人事考課を閲覧できる」のような機能が該当します
- 属性ベースアクセス制御 (ABAC: Attribute-Based Access Control)
- ユーザーの属性によってアクセス制御を行います。例えば、「営業部に所属するユーザーは、顧客管理台帳を閲覧できる」のような機能が該当します
Spring の場合:Spring Security
Spring アプリケーションに認証・認可を実装するには、Spring Security を利用するのがデファクトスタンダードです。 Spring Security を使うことで、以下のような機能を簡単に実装できます。
- ログイン・ログアウト
- ロールによる権限管理:一般ユーザーには、自分の投稿のみ編集・削除できるようにするなど
また、以下のようなセキュリティ関連の機能も提供しています。
- CSRF (Cross-Site Request Forgery) 対策
- パスワード安全な保管(ハッシュ化・ソルト・ストレッチング)
Spring Framework で Web アプリケーションを開発する際は、これらの機能を利用するために多くの場合に Spring Security が利用されます。
まとめ:Spring Security を使って Spring アプリケーションに認証・認可を実装する
このレクチャーでは、Web アプリケーションに必要なセキュリティ対策について説明しました。
- 認証とは、アクセスしたユーザーが誰であるかを特定することです
- 認可とは、ユーザーに対して適切な権限管理を行うことです
- Spring Security を使うことで、Spring アプリケーションに認証・認可を実装できます
現実のアプリケーションでは、セキュリティ対策はつねに 100 点満点が要求されます。 少しでもミスがあると、データの流出などの大きな被害をもたらします。 Spring Security の各機能を適切に利用し、Web アプリケーションのセキュリティ対策を万全なものにしていきましょう。