quarkus-security
Ajuda seu agente a implementar segurança em aplicações Quarkus. Ele configura autenticação, autorização e validação de dados para proteger o sistema contra acessos não autorizados.
O que ela faz
Este guia ensina como proteger aplicações feitas com Quarkus. Ele cobre como verificar quem está acessando (autenticação) e o que eles podem fazer (autorização), além de como garantir que as informações enviadas pelos usuários estejam corretas (validação).
Quando usar
- ✓Ao adicionar login e senha para usuários.
- ✓Ao definir quais partes do sistema cada tipo de usuário pode ver ou usar.
- ✓Ao verificar se os dados que o usuário digita estão no formato certo.
Exemplo do que pedir para a IA
“Como configuro o login usando JWT?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
O guia mostra exemplos de código para configurar autenticação (como JWT ou OIDC) e autorização (definindo papéis como 'ADMIN'). Ele também explica como validar dados de entrada usando regras pré-definidas ou personalizadas.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill quarkus-securityOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/quarkus-security/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Revisão de Segurança do Quarkus
Melhores práticas para proteger aplicações Quarkus com autenticação, autorização e validação de entrada.
Quando Ativar
- Adicionando autenticação (JWT, OIDC, Basic Auth)
- Implementando autorização com
@RolesAllowedouSecurityIdentity - Validando entrada do usuário (Bean Validation, validadores customizados)
- Configurando CORS ou cabeçalhos de segurança
- Gerenciando segredos (Vault, variáveis de ambiente, fontes de configuração)
- Adicionando limitação de taxa (rate limiting) ou proteção contra força bruta
- Verificando dependências em busca de CVEs
- Trabalhando com MicroProfile JWT ou SmallRye JWT
Autenticação
Autenticação JWT
// Resource protected with JWT
@Path("/api/protected")
@Authenticated
public class ProtectedResource {
@Inject
JsonWebToken jwt;
@Inject
SecurityIdentity securityIdentity;
@GET
public Response getData() {
String username = jwt.getName();
Set<String> roles = jwt.getGroups();
return Response.ok(Map.of(
"username", username,
"roles", roles,
"principal", securityIdentity.getPrincipal().getName()
)).build();
}
}
Configuração (application.properties):
mp.jwt.verify.publickey.location=publicKey.pem
mp.jwt.verify.issuer=https://auth.example.com
# OIDC
quarkus.oidc.auth-server-url=https://auth.example.com/realms/myrealm
quarkus.oidc.client-id=backend-service
quarkus.oidc.credentials.secret=${OIDC_SECRET}
Filtro de Autenticação Customizado
@Provider
@Priority(Priorities.AUTHENTICATION)
public class CustomAuthFilter implements ContainerRequestFilter {
@Inject
SecurityIdentity identity;
@Override
public void filter(ContainerRequestContext requestContext) {
String authHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);
// Reject immediately if header is absent or malformed
if (authHeader == null || !authHeader.startsWith("Bearer ")) {
requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
return;
}
String token = authHeader.substring(7);
if (!validateToken(token)) {
requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
}
}
private boolean validateToken(String token) {
// Token validation logic
return true;
}
}
Autorização
Controle de Acesso Baseado em Papéis (Role-Based Access Control)
@Path("/api/admin")
@RolesAllowed("ADMIN")
public class AdminResource {
@GET
@Path("/users")
public List<UserDto> listUsers() {
return userService.findAll();
}
@DELETE
@Path("/users/{id}")
@RolesAllowed({"ADMIN", "SUPER_ADMIN"})
public Response deleteUser(@PathParam("id") Long id) {
userService.delete(id);
return Response.noContent().build();
}
}
@Path("/api/users")
public class UserResource {
@Inject
SecurityIdentity securityIdentity;
@GET
@Path("/{id}")
@RolesAllowed("USER")
public Response getUser(@PathParam("id") Long id) {
// Check ownership
if (!securityIdentity.hasRole("ADMIN") &&
!isOwner(id, securityIdentity.getPrincipal().getName())) {
return Response.status(Response.Status.FORBIDDEN).build();
}
return Response.ok(userService.findById(id)).build();
}
private boolean isOwner(Long userId, String username) {
return userService.isOwner(userId, username);
}
}
Segurança Programática
@ApplicationScoped
public class SecurityService {
@Inject
SecurityIdentity securityIdentity;
public boolean canAccessResource(Long resourceId) {
if (securityIdentity.isAnonymous()) {
return false;
}
if (securityIdentity.hasRole("ADMIN")) {
return true;
}
String userId = securityIdentity.getPrincipal().getName();
return resourceRepository.isOwner(resourceId, userId);
}
}
Validação de Entrada
Bean Validation
// BAD: No validation
@POST
public Response createUser(UserDto dto) {
return Response.ok(userService.create(dto)).build();
}
// GOOD: Validated DTO
public record CreateUserDto(
@NotBlank @Size(max = 100) String name,
@NotBlank @Email String email,
@NotNull @Min(18) @Max(150) Integer age,
@Pattern(regexp = "^\\+?[1-9]\\d{1,14}$") String phone
) {}
@POST
@Path("/users")
public Response createUser(@Valid CreateUserDto dto) {
User user = userService.create(dto);
return Response.status(Response.Status.CREATED).entity(user).build();
}
Validadores Customizados
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
…
Perguntas frequentes
O que é JWT?
JWT (JSON Web Token) é uma forma comum de enviar informações de segurança entre partes, como quem é o usuário e quais são suas permissões.
O que é OIDC?
OIDC (OpenID Connect) é um protocolo que permite que usuários façam login em uma aplicação usando credenciais de outro serviço, como Google ou Facebook.
O que são 'headers' de segurança?
São instruções extras enviadas com as requisições para aumentar a segurança, como bloquear acesso de origens indesejadas (CORS) ou proteger contra ataques comuns.
Detalhes
Descrição original do autor
Quarkus security implementation patterns: JWT and OIDC authentication, @RolesAllowed RBAC and SecurityIdentity checks, Bean Validation and custom validators, parameterized Panache queries, BCrypt password hashing, CORS and security headers, rate limiting, audit logging, Vault or environment-variable secrets, and dependency CVE scanning. Use when adding authentication or authorization, validating i
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #107
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
security-and-hardening
Protege seu código contra ataques e falhas de segurança. Garante que dados sensíveis estejam seguros e que o sistema seja confiável.
addyosmani/agent-skills
luna
Faz seu agente verificar se o código está seguro e funcionando corretamente. Ele procura por erros e falhas que possam causar problemas.
sickn33/agentic-awesome-skills
anti-reversing-techniques
Ajuda seu agente a analisar técnicas de segurança em programas. Permite entender como softwares se protegem contra cópias ou alterações.
sickn33/agentic-awesome-skills