Quarkusのセキュリティ基礎を完全解説!初心者でもわかる認証と認可の基本
生徒
「Quarkusでアプリを作るときに、ユーザーの認証やアクセス制御ってどうやって実装するんですか?」
先生
「Quarkusでは、認証と認可の基本を押さえることで安全なアプリケーションを作ることができます。順を追って説明しますね。」
生徒
「まず、認証と認可の違いって何ですか?」
先生
「認証は『このユーザーが誰かを確認する』こと、認可は『確認したユーザーが何をできるかを決める』ことです。」
生徒
「なるほど、Quarkusでは具体的にどう設定するんですか?」
先生
「Quarkusは標準でセキュリティ拡張を提供しているので、依存関係を追加して簡単に認証と認可を組み込めます。」
1. Quarkusのセキュリティ拡張とは?
Quarkusにはquarkus-security拡張やquarkus-oidc拡張など、セキュリティ関連のライブラリが用意されています。これらをプロジェクトに追加することで、JWT認証やOAuth2、基本認証を簡単に使うことができます。
初心者でも、依存関係を追加して少し設定するだけで、ユーザー認証やアクセス制御を実現できる点がQuarkusの魅力です。
2. 認証の基本を理解する
認証は「誰がアクセスしているか」を確認する仕組みです。Quarkusでは、HTTP Basic認証やJWT認証がよく使われます。例えば、HTTP Basic認証はユーザー名とパスワードを使ったシンプルな認証方法です。
@ApplicationScoped
public class UserService {
public boolean authenticate(String username, String password) {
return "user".equals(username) && "pass".equals(password);
}
}
この例では、固定のユーザー名とパスワードで認証を行っています。学習用として理解しやすい形です。
3. 認可の基本を理解する
認可は「認証済みユーザーがどの操作をできるか」を決める仕組みです。Quarkusでは、@RolesAllowedアノテーションを使って簡単に制御できます。
@Path("/admin")
public class AdminResource {
@GET
@RolesAllowed("admin")
public String adminOnly() {
return "管理者のみアクセス可能";
}
}
ここでは、adminロールを持つユーザーだけがアクセスできるエンドポイントを作っています。
4. Quarkusのセキュリティ設定ファイル
Quarkusではapplication.propertiesにセキュリティ設定を記述します。たとえば、ユーザー名やパスワード、JWTの発行元などを設定できます。
quarkus.http.auth.permission.admin.paths=/admin/*
quarkus.http.auth.permission.admin.policy=roles
quarkus.security.users.embedded.enabled=true
quarkus.security.users.embedded.plain-text=true
quarkus.security.users.embedded.users.user=password
quarkus.security.users.embedded.roles.user=admin
これにより、adminエンドポイントへのアクセス制御が有効になります。
5. JWT認証の導入
QuarkusではJWTを使った認証も簡単に導入できます。JWTはユーザー情報を暗号化してトークンにしたものです。これを使うことで、セッション管理が不要になり、スケーラブルなアプリケーションを作れます。
@GET
@Path("/profile")
@RolesAllowed("user")
public String userProfile(@Context SecurityContext ctx) {
return "Hello " + ctx.getUserPrincipal().getName();
}
JWTトークンが有効であれば、ユーザー名を取得して画面に表示できます。
6. セキュリティをテストする
Quarkusでは、REST APIのテスト時にもセキュリティを簡単に確認できます。例えば、REST-assuredを使って認証が正しく動作するかテストできます。
given()
.auth().basic("user", "pass")
.when()
.get("/admin")
.then()
.statusCode(200);
正しいユーザーでアクセスできることを確認することで、セキュリティ設定が機能しているか検証できます。
7. Quarkusセキュリティのポイント
Quarkusでセキュリティを導入するときのポイントは、認証と認可を分けて考えることです。また、application.propertiesで簡単に設定できるため、開発者はコードと設定の両方で安全性を高めることができます。
さらに、JWTやOAuth2を活用すれば、クラウド環境やマイクロサービス間の認証もスムーズに行えます。初心者でも、まずはBasic認証やロールベースの認可から始めると理解しやすいです。
8. 実践的なサンプルまとめ
ここまでの内容を組み合わせると、Quarkusで簡単なセキュリティ付きアプリケーションを作ることができます。ユーザー認証、アクセス制御、JWT認証、設定ファイル、テストまで一通りの流れを学ぶことが可能です。
@Path("/hello")
public class HelloResource {
@GET
@RolesAllowed({"user", "admin"})
public String hello(@Context SecurityContext ctx) {
return "Hello " + ctx.getUserPrincipal().getName();
}
}
このサンプルでは、userまたはadminロールを持つユーザーだけがアクセスできるエンドポイントを作っています。