セキュリティのテスト
このドキュメントでは、Quarkus Securityのテスト方法について説明します。
ユーザー情報の設定
セキュリティのテストには quarkus-elytron-security-properties-file が使えます。これは、 application.properties
にユーザー情報を埋め込むことと、スタンドアロンのプロパティファイルの両方をサポートしています。
例えば、以下の設定では、 設定プロファイル を使って、OAuth2が必要な本番モードと開発モードの両方でユーザーを設定することができます。
# Configure embedded authentication
%dev.quarkus.security.users.embedded.enabled=true
%dev.quarkus.security.users.embedded.plain-text=true
%dev.quarkus.security.users.embedded.users.scott=reader
%dev.quarkus.security.users.embedded.users.stuart=writer
%dev.quarkus.security.users.embedded.roles.scott=READER
%dev.quarkus.security.users.embedded.roles.stuart=READER,WRITER
# Configure OAuth2
quarkus.oauth2.enabled=true
%dev.quarkus.oauth2.enabled=false
quarkus.oauth2.client-id=client-id
quarkus.oauth2.client-secret=client-secret
quarkus.oauth2.introspection-url=http://host:port/introspect
セキュリティーエクステンションのテスト
Quarkusは、異なるユーザーでのテストや、セキュリティーサブシステムを無効にした状態でのテストを明示的にサポートしています。これを使用するには、 quarkus-test-security
のアーティファクトを含める必要があります。
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-test-security</artifactId>
<scope>test</scope>
</dependency>
testImplementation("io.quarkus:quarkus-test-security")
このアーティファクトは io.quarkus.test.security.TestSecurity
アノテーションを提供します。これをテストメソッドやテストクラスに適用することで、テストが実行されるセキュリティーコンテキストを制御することができます。認証を必要とせずに安全なエンドポイントにテストがアクセスできるように認証を無効にすることができ、テストを実行する際の ID を指定することができます。
認可を無効にして実行されるテストは、enabled プロパティーを false に設定するだけです。
@Test
@TestSecurity(authorizationEnabled = false)
void someTestMethod() {
...
}
これにより、すべてのアクセスチェックが無効になり、認証を必要とせずに保護されたエンドポイントにアクセスできるようになります。
これを使用して、テストを実行する現在のユーザーを設定することもできます:
@Test
@TestSecurity(user = "testUser", roles = {"admin", "user"})
void someTestMethod() {
...
}
これは、指定されたユーザー名とロールを持つ ID でテストを実行します。これらを組み合わせることができるので、認証を無効にしながらテストを実行するための ID を提供することができることに注意してください。
注入された JsonWebToken
に依存するエンドポイントコードのテストの詳細については、 OpenID Connect ベアラートークン結合テスト 、 OpenID Connect 認可コードフロー結合テスト 、 SmallRye JWT 統合テスト を参照してください。
この機能は |
`@TestSecurity` は、メタアノテーションでも使うことができます。例:
これは、同じセキュリティ設定のセットを複数のテストメソッドで使用する必要がある場合に特に便利です。 |
統合テストにWiremockを使用する
Wiremockを使用して認可OAuth2とOIDCサービスをモックすることもできます:詳細は OAuth2統合テスト 、 OpenID Connect Bearer Token統合テスト 、 OpenID Connect 認可コードフロー統合テスト 、 SmallRye JWT統合テスト を参照してください。