Buenas prácticas de seguridad en Quarkus para autenticación, autorización, JWT/OIDC, RBAC, validación de entrada, CSRF, gestión de secretos y seguridad de dependencias.
Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
Buenas prácticas de seguridad en Quarkus para autenticación, autorización, JWT/OIDC, RBAC, validación de entrada, CSRF, gestión de secretos y seguridad de dependencias.
origin
ECC
Revisión de Seguridad Quarkus
Buenas prácticas para asegurar aplicaciones Quarkus con autenticación, autorización y validación de entrada.
Cuándo Activar
Agregar autenticación (JWT, OIDC, Basic Auth)
Implementar autorización con @RolesAllowed o SecurityIdentity
Validar entrada de usuario (Bean Validation, validadores personalizados)
Configurar CORS o cabeceras de seguridad
Gestionar secretos (Vault, variables de entorno, fuentes de configuración)
Agregar limitación de velocidad o protección contra fuerza bruta
# application.properties - SIN SECRETOS AQUÍ
# Usar variables de entorno
quarkus.datasource.username=${DB_USER}
quarkus.datasource.password=${DB_PASSWORD}
quarkus.oidc.credentials.secret=${OIDC_CLIENT_SECRET}
# O usar Vault
quarkus.vault.url=https://vault.example.com
quarkus.vault.authentication.kubernetes.role=my-role
Limitación de Velocidad
Nota de Seguridad: Nunca usar X-Forwarded-For directamente — los clientes pueden falsificarlo.
Usar la dirección remota real de la solicitud servlet, o una identidad autenticada
(clave API, subject del JWT) cuando esté disponible.
@ApplicationScopedpublicclassRateLimitFilterimplementsContainerRequestFilter {
privatefinal Map<String, RateLimiter> limiters = newConcurrentHashMap<>();
@Inject
HttpServletRequest servletRequest;
@Overridepublicvoidfilter(ContainerRequestContext requestContext) {
StringclientId= getClientIdentifier();
RateLimiterlimiter= limiters.computeIfAbsent(clientId,
k -> RateLimiter.create(100.0)); // 100 solicitudes por segundoif (!limiter.tryAcquire()) {
requestContext.abortWith(
Response.status(429)
.entity(Map.of("error", "Demasiadas solicitudes"))
.build()
);
}
}
private String getClientIdentifier() {
// Usar la dirección remota provista por el contenedor (no X-Forwarded-For).// Si está detrás de un proxy confiable, configurar// quarkus.http.proxy.proxy-address-forwarding=true// para que getRemoteAddr() retorne la IP real del cliente.return servletRequest.getRemoteAddr();
}
}