Plataforma Wittgenstein - Segurança e Autenticação
A segurança da plataforma Wittgenstein é baseada em OpenID Connect (OIDC) com PKCE (Proof Key for Code Exchange), operado via Keycloak.
O Papel do Keycloak e OIDC com PKCE
O OIDC construído sobre o OAuth 2.0 fornece não apenas autorização, mas também autenticação robusta. O fluxo com PKCE é fundamental para aplicações modernas, pois mitiga ataques de interceptação de código de autorização:
1. O cliente (front-end) gera um code_verifier aleatório e um code_challenge.
2. O code_challenge é enviado ao Keycloak junto com o pedido de login.
3. Após a autenticação, o Keycloak retorna um código de autorização.
4. O back-end (atuando como cliente confidencial) troca esse código pelo Access Token e Refresh Token, apresentando o code_verifier.
Backend como Confidential Client
Na plataforma Wittgenstein, o back-end atua como um Confidential Client. O front-end não lida diretamente com os tokens sensíveis após o fluxo de login. Em vez disso:
- O back-end troca o código de autorização por tokens.
- O Refresh Token é armazenado e devolvido ao front-end estritamente como um cookie HttpOnly.
- Esse cookie HttpOnly não pode ser acessado via JavaScript, tornando a sessão imune a ataques de Cross-Site Scripting (XSS).
Expiração de Tokens e Mitigação de Roubo
A gestão do ciclo de vida dos tokens é uma camada adicional de segurança:
- O Access Token possui um tempo de expiração curto (por exemplo, 5 a 15 minutos).
- Se o Access Token for vazado ou roubado (já que pode residir em memória no front-end para chamadas à API), o tempo de utilidade para o atacante é severamente limitado.
- O atacante não consegue refrescar o token porque o Refresh Token está isolado no cookie HttpOnly, o qual o navegador envia automaticamente de forma segura nas chamadas de atualização de sessão para o back-end, mas que permanece inacessível ao atacante.