Basic 認証
HTTP Basic 認証は、Web リソースへのアクセス制御を実施する、最もリソースを必要としない技術の 1 つです。HTTP Basic 認証を使用することで、Quarkus アプリケーションのエンドポイントを保護できます。Quarkus には、Basic 認証用の組み込み認証メカニズムが含まれています。
Basic 認証は HTTP ヘッダーのフィールドを使用し、HTTP クッキー、セッション識別子、ログインページには依存しません。
Authorization ヘッダー
Web ブラウザーのような HTTP ユーザーエージェントは、各 HTTP リクエストでユーザー名とパスワードを提供するために Authorization ヘッダーを使用します。このヘッダーは Authorization: Basic <credentials> として指定され、クレデンシャルはコロンで連結されたユーザー ID とパスワードを Base64 エンコードしたものです。
ユーザー名が Alice でパスワードが secret の場合、HTTP 認証ヘッダーは Authorization: Basic QWxpY2U6c2VjcmV0 となります。ここで、 QWxpY2U6c2VjcmV0 は Alice:secret 文字列の Base64 エンコード表現です。
Basic 認証メカニズムは、送信されるクレデンシャルの機密性保護を提供しません。クレデンシャルは転送時に Base64 でエンコードされるだけで、いかなる方法でも暗号化またはハッシュ化されません。したがって、機密性を提供するには、Basic 認証と HTTPS を組み合わせて使用してください。
Basic 認証は、すべての Web ブラウザーとほとんどの Web サーバーが理解できる、適切に仕様化されたシンプルなチャレンジ・レスポンス方式です。
Basic 認証を使用した場合の制限事項
次の表は、Quarkus アプリケーションを保護するために HTTP Basic 認証を使用する際の制限事項をまとめたものです。
| 制限 | 説明 |
|---|---|
クレデンシャルがプレーンテキストで送信されます |
クレデンシャルが露出するのを避けるために、Basic 認証と HTTPS を組み合わせて使用してください。ロードバランサーが HTTPS を終端し、リクエストが HTTP 経由で Quarkus に転送される場合、クレデンシャルがプレーンテキストとして露出するリスクが高まります。さらに、マルチホップデプロイメントでは、クライアントと最初の Quarkus エンドポイント間でのみ HTTPS が使用され、クレデンシャルが HTTP 経由で次の Quarkus エンドポイントに伝播される場合、クレデンシャルが露出する可能性があります。 |
クレデンシャルはリクエストごとに送信されます |
Basic 認証では、ユーザー名とパスワードをリクエストごとに送信する必要があり、クレデンシャルが露出するリスクが高まります。 |
アプリケーションの複雑性の増大 |
Quarkus アプリケーションは、ユーザー名、パスワード、およびロールが安全に管理されていることを検証する必要があります。しかし、このプロセスはアプリケーションに大きな複雑さをもたらす可能性があります。ユースケースによっては、ユーザー名、パスワード、ロールの管理を専門サービスに委譲する他の認証メカニズムの方が、より安全である場合があります。 |
ロールベースのアクセス制御
Quarkus には、REST エンドポイントと CDI Bean での一般的なセキュリティアノテーション @RolesAllowed、@DenyAll、@PermitAll に基づくロールベースのアクセス制御 (RBAC) を可能にする組み込みセキュリティも含まれています。詳細については、Quarkus Web エンドポイントの認可 ガイドを参照してください。
Basic 認証をプログラムで設定する
io.quarkus.vertx.http.security.HttpSecurity CDI イベントにより、以下の例のように Basic 認証メカニズムをプログラムで設定できます。
package org.acme.http.security;
import io.quarkus.vertx.http.security.HttpSecurity;
import jakarta.enterprise.event.Observes;
public class HttpSecurityConfiguration {
void configure(@Observes HttpSecurity httpSecurity) {
httpSecurity.basic("QuarkusTestRealm"); (1)
}
}
| 1 | Basic 認証を有効にし、QuarkusTestRealm 認証レルムを使用します。 |
|
SmallRye OpenAPI エクステンションで OpenAPI スキーマードキュメントを生成する場合、ビルド時に |