Pruebas de seguridad
Este documento describe cómo probar Quarkus Security.
Configuración de la información del usuario
Puedes usar quarkus-elytron-security-properties-file para probar la seguridad. Esto soporta tanto la introducción de la información del usuario en application.properties
como los archivos de propiedades independientes.
For example, the following configuration will allow for configuring the users in both the production where OAuth2 is required and development modes using Configuration Profiles.
# 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
Probar la extensión de seguridad
Quarkus proporciona soporte explícito para realizar pruebas con diferentes usuarios, y con el subsistema de seguridad desactivado. Para utilizarlo debe incluir la dependencia quarkus-test-security
:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-test-security</artifactId>
<scope>test</scope>
</dependency>
testImplementation("io.quarkus:quarkus-test-security")
Este artefacto proporciona la anotación io.quarkus.test.security.TestSecurity
, que puede aplicarse a los métodos y clases de prueba para controlar el contexto de seguridad con el que se ejecuta la prueba. Esto te permite hacer dos cosas, puedes deshabilitar la autorización para que las pruebas puedan acceder a puntos finales seguros sin necesidad de autenticarse, y puedes especificar la identidad con la que quieres que se ejecuten las pruebas.
Una prueba que se ejecuta con la autorización deshabilitada puede simplemente establecer la propiedad enabled en false:
@Test
@TestSecurity(authorizationEnabled = false)
void someTestMethod() {
...
}
Esto deshabilitará todas las comprobaciones de acceso, lo que permite que la prueba acceda a endpoints seguros sin necesidad de autenticarse.
También puede utilizarlo para configurar el usuario actual con el que se ejecutará la prueba:
@Test
@TestSecurity(user = "testUser", roles = {"admin", "user"})
void someTestMethod() {
...
}
Esto ejecutará la prueba con una identidad con el nombre de usuario y los roles dados. Tenga en cuenta que estos pueden combinarse, por lo que puede desactivar la autorización y al mismo tiempo proporcionar una identidad para ejecutar la prueba, lo que puede ser útil si el endpoint espera que una identidad esté presente.
See OpenID Connect Bearer Token Integration testing, OpenID Connect Authorization Code Flow Integration testing and SmallRye JWT Integration testing for more details about testing the endpoint code which depends on the injected JsonWebToken
.
The feature is only available for |
This is particularly useful if the same set of security settings needs to be used in multiple test methods. |
Mezcla de pruebas de seguridad
Si es necesario probar las funciones de seguridad utilizando tanto @TestSecurity
como Basic Auth (que es el mecanismo de autenticación de reserva cuando no se define ninguno), entonces Basic Auth debe habilitarse explícitamente, por ejemplo, configurando quarkus.http.auth.basic=true
o %test.quarkus.http.auth.basic=true
.
Utilizar Wiremock para las pruebas de integración
You can also use Wiremock to mock the authorization OAuth2 and OIDC services: See OAuth2 Integration testing, OpenID Connect Bearer Token Integration testing, OpenID Connect Authorization Code Flow Integration testing and SmallRye JWT Integration testing for more details.