Base64 em segurança web: JWT, autenticação de APIs e boas práticas
Base64 aparece em praticamente todos os sistemas de autenticação e segurança web modernos. Tokens JWT, headers de HTTP Basic Auth, tokens OAuth, certificados TLS e chaves SSH usam Base64 em algum ponto. Entender o papel do Base64 nesses sistemas — e suas limitações de segurança — é essencial para desenvolvedores que constroem APIs e aplicações web. O Codificador Base64 do WikiPlus é uma ferramenta de análise rápida para depurar esses sistemas.
JWT (JSON Web Token): estrutura e uso do Base64
Um JWT consiste em três partes separadas por pontos: header.payload.signature, todas em Base64url. O header especifica o algoritmo: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 decodifica para {"alg":"HS256","typ":"JWT"}. O payload contém os claims: eyJzdWIiOiJ1c2VyMTIzIiwiaWF0IjoxNzE1NTAwODAwfQ decodifica para {"sub":"user123","iat":1715500800}. A assinatura é o HMAC do header+payload, também em Base64url, mas esta não pode ser decodificada para texto legível — é dados binários. A segurança do JWT está na assinatura, não no Base64: qualquer pessoa pode decodificar o payload para lê-lo.
OAuth 2.0 e Base64 em client credentials
No fluxo OAuth 2.0 Client Credentials, o client_id e client_secret são enviados como HTTP Basic Auth: Authorization: Basic BASE64(client_id:client_secret). Isso é Base64 padrão do par clientId:clientSecret. Por exemplo, se client_id='myapp' e client_secret='s3cr3t', o header é Basic bXlhcHA6czNjcjN0. Sem TLS, essas credenciais são completamente expostas por qualquer interceptador, pois Base64 é trivialmente decodificável. O Codificador Base64 do WikiPlus permite verificar se seu cliente OAuth está construindo o header corretamente ao depurar falhas de autenticação.
Chaves SSH e certificados em Base64
Arquivos de chave SSH privada (~/.ssh/id_rsa) e certificados TLS em formato PEM contêm Base64 entre marcadores textuais. -----BEGIN RSA PRIVATE KEY----- e -----END RSA PRIVATE KEY----- delimitam o conteúdo DER binário codificado em Base64. Ao copiar chaves SSH entre sistemas, é comum corromper o Base64 quebrando linhas incorretamente ou introduzindo espaços. O Codificador Base64 do WikiPlus valida se uma string Base64 tem caracteres válidos e padding correto, útil para diagnosticar chaves corrompidas antes de tentar usá-las.
O que Base64 não faz: equívocos de segurança comuns
Um equívoco perigoso e comum é usar Base64 como ofuscação de segurança. Armazenar senhas como Base64 em banco de dados não oferece nenhuma proteção — qualquer atacante que acesse o banco decodificará em segundos. Enviar dados sensíveis em Base64 por HTTP sem TLS não os protege de interceptação. JWTs com payload em Base64 não protegem as informações do payload — elas são legíveis por qualquer pessoa com o token. Base64 serve exclusivamente para transporte de formato, não para segurança. Para senhas, use bcrypt, Argon2 ou scrypt. Para dados em trânsito, use TLS. Para dados confidenciais em tokens, use criptografia assimétrica (JWE em vez de JWS).
Perguntas frequentes
- É seguro armazenar dados em Base64?
- Não, se o objetivo for segurança. Base64 é completamente reversível por qualquer pessoa — é encoding, não criptografia. Para armazenar senhas, use hash com bcrypt ou Argon2. Para dados confidenciais, use AES-256 com chave segura. Base64 apenas muda o formato.
- Como verificar se um JWT está expirado sem biblioteca?
- Decodifique o payload Base64url do JWT (a segunda parte). O claim 'exp' é um timestamp Unix em segundos. Compare com Math.floor(Date.now()/1000) em JavaScript. Se exp < agora, o token está expirado.
- Base64 e Base64url são compatíveis?
- Não diretamente. Base64 padrão usa + e / como 62° e 63° caracteres, com = como padding. Base64url substitui + por - e / por _, e pode omitir =. Uma string Base64 padrão com + ou / falhará em contextos que esperam Base64url e vice-versa.