Fundamentos de Segurança¶
Segurança é propriedade do sistema. Adicionar filter chain não compensa limite de confiança indefinido, segredos expostos ou regras de autorização ausentes.
Autenticação e autorização¶
- Autenticação estabelece identidade ou principal.
- Autorização decide se o principal pode executar uma ação sobre um recurso.
O suporte servlet do Spring Security opera por filtros. O contexto de segurança representa o principal autenticado e suas authorities. Aplique autorização em requisições e métodos deliberadamente; não confie apenas em ocultar controles da UI.
@Bean
SecurityFilterChain apiSecurity(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(authorize -> authorize
.requestMatchers(HttpMethod.GET, "/books/**").permitAll()
.anyRequest().authenticated())
.httpBasic(Customizer.withDefaults())
.build();
}
Este é um mínimo didático, não uma política universal de produção.
Ameaças web¶
- Use proteção CSRF em requisições de navegador autenticadas por credenciais enviadas automaticamente, salvo arquitetura segura diferente.
- CORS controla quais origens podem ler respostas; não é autenticação.
- Codifique saída não confiável para o contexto de destino e evite injection.
- Use banco parametrizado, tratamento estrito da entrada e privilégio mínimo.
- Defina políticas seguras de transporte, cookies e cabeçalhos.
Credenciais e tokens¶
Armazene senhas com função adaptativa unidirecional por encoder adequado; não as criptografe para recuperação. Faça rotação, limite o escopo e use armazenamento gerenciado, fora do controle de versão e dos logs.
JWT assinado não é criptografado por padrão. Valide issuer, audience, assinatura, tempo, algoritmos aceitos e autorização. Planeje revogação, rotação, clock skew e vida do token.
Evite revelar se identificador protegido existe quando isso for sensível. Registre eventos de segurança sem credenciais nem tokens completos.
Consulte a arquitetura oficial do Spring Security.