このページを編集

guides/security-basic-authentication.adoc

HTTP Basic認証は、Webリソースへのアクセス制御を実施する最もリソースを必要としないテクニックの1つです。 HTTPBasic認証を使用することで、Quarkusアプリケーションのエンドポイントを保護できます。Quarkusには、Basic認証用の認証メカニズムが組み込まれています。

Basic認証はHTTPヘッダーのフィールドを使用し、HTTPクッキー、セッション識別子、ログインページには依存しません。

Authorization ヘッダー

ウェブブラウザのような HTTP ユーザエージェントは、各 HTTP リクエストでユーザ名とパスワードを提供するために Authorization ヘッダを使用します。 このヘッダは Authorization: Basic <credentials> として指定され、クレデンシャルはコロンで連結されたユーザー ID とパスワードの Base64 エンコーディングです。

例:

ユーザー名が Alice でパスワードが secret の場合、HTTP 認証ヘッダーは Authorization: Basic QWxpY2U6c2VjcmV0 となります。ここで、 QWxpY2U6c2VjcmV0Alice:secret 文字列の Base64 エンコード表現です。

Basic認証メカニズムは、送信されるクレデンシャルの機密性保護を提供しません。 クレデンシャルは転送時に Base64 でエンコードされるだけで、暗号化もハッシュ化もされません。 したがって、機密性を提供するには、 https で Basic 認証を使用してください。

Basic認証は、すべてのウェブブラウザとほとんどのウェブサーバが理解できる、よく規定された単純なチャレンジとレスポンスのスキームです。

Basic認証を使用した場合の制限事項

次の表は、Quarkusアプリケーションを保護するためにHTTP Basic認証を使用する際の制限事項をまとめたものです:

Table 1. HTTP Basic認証の制限事項
制限 説明

認証情報がプレーンテキストで送信されます

クレデンシャルが公開されないようにするに、Basic認証でHTTPSを使用してください。 リクエストがHTTP経由でQuarkusに転送されるため、ロードバランサーがHTTPSを終端すると、クレデンシャルがプレーンテキストとして公開されるリスクが高まります。 さらに、マルチホップ展開では、クライアントと最初のQuarkusエンドポイント間のみでHTTPSが使用され、クレデンシャルがHTTP経由で次のQuarkusエンドポイントに伝搬される場合、クレデンシャルが露出する可能性があります。

認証情報はリクエスト毎に送信されます

Basic認証では、ユーザー名とパスワードをリクエストごとに送信しなければならず、クレデンシャルが漏洩するリスクが高まります。

アプリケーションの複雑性の増大

Quarkusアプリケーションは、ユーザー名、パスワード、ロールが安全に管理されていることを検証する必要があります。 しかし、このプロセスはアプリケーションに大きな複雑さをもたらす可能性があります。 ユースケースによっては、ユーザー名、パスワード、ロールの管理を専用のサービスに委譲する他の認証メカニズムの方がより安全かもしれません。

QuarkusでのBasic認証の実装

Basic認証を使用してQuarkusアプリケーションを保護する方法の詳細については、次のリソースを参照してください:

ロールベースのアクセス制御

また、Quarkus には、REST エンドポイントや CDI Bean に共通のセキュリティ注釈 @RolesAllowed@DenyAll@PermitAll に基づく役割ベースのアクセス制御(RBAC)を可能にするセキュリティが組み込まれています。 詳細については、Quarkus ウェブエンドポイントの認可 ガイドを参照してください。

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 スキーマードキュメントを生成する場合、ビルド時に quarkus.http.auth.basic 設定プロパティーで Basic 認証を有効にする必要があります。

関連コンテンツ