🔐
← Voltar aos guias

Codificação Base64 Segura para URL: O Que É e Por Que Importa

· Tags: base64, url-safe, base64url, jwt, encoding, web-development, api

O Que É a Codificação Base64 Segura para URL?

A codificação Base64 segura para URL (também chamada de Base64url) é uma variante do Base64 padrão que substitui caracteres que têm significados especiais em URLs e nomes de arquivo por alternativas seguras. O Base64 padrão usa + e / como parte de seu alfabeto de 64 caracteres, além de = para padding, e todos os três são problemáticos em URLs, strings de consulta e caminhos de arquivo.

O Base64url resolve isso com duas substituições simples:

| Base64 Padrão | Base64 Seguro para URL | |-----------------|-----------------| | + (mais) | - (menos) | | / (barra) | _ (sublinhado) | | = (padding) | omitido (geralmente) |

Por Que o Base64 Padrão Quebra URLs

Quando uma string codificada em Base64 contendo + ou / aparece em uma URL, o comportamento do navegador e do servidor se torna imprevisível.

O Problema do +

Em strings de consulta de URL, o caractere + é interpretado como um espaço. Esse comportamento vem da especificação application/x-www-form-urlencoded e faz com que os dados decodificados contenham espaços inesperados.

Por exemplo, uma string Base64 como Pj4+Pz8/Pw== contém caracteres +. Se ela aparecer em um parâmetro de URL ?token=Pj4+Pz8/Pw==, o servidor verá ?token=Pj4 Pz8/Pw== — o + se torna um espaço.

O Problema do /

Em caminhos de URL, o caractere / é um separador de caminho. Uma string Base64 como ab/CD+Ef== contém um / que será interpretado como um nível de diretório. Se ela aparecer em um segmento de URL, tanto o cliente quanto o servidor podem interpretar mal a estrutura.

O Problema do =

O caractere = é usado para pares chave-valor em strings de consulta. Um = final em ?data=SGVsbG8= pode ser ambíguo — o = faz parte do padding do Base64 ou da sintaxe do parâmetro de consulta?

Embora o percent-encoding possa corrigir esses problemas (+ se torna %2B, / se torna %2F), ele infla o comprimento da string e torna a depuração mais difícil. O Base64url é uma solução mais limpa.

Como o Base64url Funciona

O Base64url é formalmente definido na Seção 5 da RFC 4648. Ele usa exatamente o mesmo algoritmo do Base64 padrão — 3 bytes se tornam 4 caracteres — mas com a substituição de um caractere nas posições 62 e 63 do alfabeto:

  • Índice do alfabeto 62: +- (menos)
  • Índice do alfabeto 63: /_ (sublinhado)

O padding (=) é normalmente removido, pois pode ser inferido a partir do comprimento da string na decodificação. Uma string Base64url é sempre um componente de URL válido sem escape adicional.

Antes e Depois

Aqui está a aparência dos mesmos dados binários nos dois formatos:

Standard:  Pj4+Pz8/Pw==
URL-safe:  Pj4-Pz8_Pw

Onde o Base64url É Usado

JSON Web Tokens (JWT)

O JWT é o usuário mais proeminente do Base64url. Todo JWT consiste em três partes — cabeçalho, payload e assinatura — cada uma codificada em Base64 seguro para URL e separadas por pontos:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNqP0m2iTgCjD0

Observe os travessões e sublinhados — sem sinais de mais ou barras. Se o JWT usasse Base64 padrão, os tokens quebrariam quando passados como parâmetros de URL, que é a forma mais comum de usá-los em aplicações web.

OAuth e OpenID Connect

Tanto o OAuth 2.0 quanto o OpenID Connect dependem do JWT para tokens de acesso e tokens de ID, tornando a codificação Base64url fundamental para a autenticação moderna. O fluxo de código de autorização, o fluxo implícito e o fluxo de credenciais de cliente transmitem tokens que usam Base64url.

APIs Web e Parâmetros de Consulta

Muitas APIs REST e GraphQL aceitam dados codificados em Base64 em parâmetros de consulta para cursores de paginação, filtros ou payloads codificados. O Base64url garante que esses parâmetros funcionem corretamente sem codificação de URL adicional.

Exemplo do mundo real — paginação de cursor em APIs:

GET /api/users?cursor=MjAyNC0wMS0xNVQxMDozMDowMFo

A API do GitHub usa exatamente esse padrão para paginar grandes conjuntos de resultados.

Nomes de Arquivo e Armazenamento de Arquivos

Strings Base64url geram nomes de arquivo seguros porque não contêm separadores de caminho (/), nem caracteres especiais que confundem sistemas de arquivos, nem caracteres inválidos no Windows (:, *, ?, etc.).

Content Delivery Networks e Chaves de Cache

CDNs e camadas de cache frequentemente usam valores codificados em Base64url como chaves de cache. O Base64 padrão com / criaria hierarquias de diretórios falsas no namespace do cache, levando a chaves ambíguas.

Convertendo entre Base64 Padrão e Base64url

Converter entre as duas variantes é direto em qualquer linguagem:

JavaScript

// Standard Base64 to URL-safe Base64
function base64ToBase64url(base64) {
  return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}

// URL-safe Base64 to Standard Base64
function base64urlToBase64(base64url) {
  let result = base64url.replace(/-/g, '+').replace(/_/g, '/');
  // Restore padding
  while (result.length % 4) {
    result += '=';
  }
  return result;
}

Node.js

O Node.js oferece suporte nativo a Base64url desde a versão 15.7.0:

// Encode to Base64url
const encodedUrl = Buffer.from('Hello, world!').toString('base64url');
console.log(encodedUrl);
// Output: SGVsbG8sIHdvcmxkIQ

// Decode from Base64url
const decoded = Buffer.from(encodedUrl, 'base64url').toString('utf-8');
console.log(decoded);
// Output: Hello, world!

Python

import base64

# Encode to Base64url
encoded = base64.urlsafe_b64encode(b"Hello, world!")
print(encoded.decode())
# Output: SGVsbG8sIHdvcmxkIQ==

# Decode from Base64url
decoded = base64.urlsafe_b64decode(encoded)
print(decoded.decode())
# Output: Hello, world!

Quando Usar Base64 Padrão vs Base64url

Use Base64 Padrão Quando:

  • Codificando anexos de e-mail (o padrão MIME exige isso)
  • Gerando data URLs para incorporação em HTML/CSS
  • Armazenando dados em bancos de dados onde a segurança para URL é irrelevante
  • Interagindo com sistemas legados que esperam Base64 padrão

Use Base64url Quando:

  • Criando ou analisando tokens JWT
  • Passando dados codificados em parâmetros de consulta de URL ou segmentos de caminho
  • Gerando nomes de arquivo a partir de dados binários
  • Criando chaves de cache ou identificadores
  • Trabalhando com tokens OAuth ou OpenID Connect

Experimente a Codificação Base64 Segura para URL Online

Use nosso codificador e decodificador Base64 online gratuito para converter entre os formatos Base64 padrão e Base64 seguro para URL. Cole seus dados, escolha sua variante e obtenha o resultado instantaneamente.