Autenticação de API de mapas

Por The Kaleidr Team · Publicado 17 de agosto de 2026 · 16 min de leitura

Arquitetura segura que separa uma chave publicável e sessão vinculada à origem de uma chave de servidor e dados privados.

Um design seguro separa credenciais por ambiente de execução. O navegador precisa de uma credencial segura para exposição e estritamente limitada a origens e capacidades aprovadas. O backend precisa de um segredo que nunca entre no código cliente e autorize operações servidor a servidor. Não devem ser intercambiáveis. Limite âmbitos, separe ambientes, monitorize uso, rode credenciais e distinga falhas de autenticação das de autorização. A Kaleidr implementa isto com chaves publicáveis (kld_pk_live_…) e chaves de servidor (kld_sk_live_…).

As secções seguintes abrangem credenciais de navegador e servidor, origens, CORS, âmbitos, ciclo de vida, limites de confiança multi-inquilino e erros comuns. Consulte a documentação para programadores. Para a arquitetura SDK, veja O que é um SDK de mapas com IA?. Para incorporação e chat, veja Como incorporar um mapa interativo e Chat de IA no Mapbox, Google Maps e MapLibre.

Elementos essenciais

  • Primeiro o ambiente: credenciais do navegador são feitas para exposição; as do servidor para segredo.
  • Origem ≠ autenticação: CORS e origens permitidas não substituem a verificação.
  • Âmbito ≠ inquilino: âmbitos de capacidade não são autorização de utilizador ou linha.
  • Rotação segura: implemente a substituição antes de revogar uma chave ativa.
  • Oculte nos registos: registe IDs e estados, nunca valores de credenciais.

Arquitetura segura que separa uma chave publicável e sessão vinculada à origem de uma chave de servidor e dados privados.

Por que é diferente no navegador?

O navegador é um ambiente não fiável. Tudo o que recebe pode normalmente ser inspecionado na fonte, ferramentas de programação, pedidos de rede, JavaScript empacotado, armazenamento ou objetos em execução. Colocar um segredo duradouro no cliente—React, variáveis Next.js NEXT_PUBLIC_*, Vite VITE_*, HTML, webviews móveis ou JSON frontend—é inseguro porque o navegador não o pode esconder de quem o executa. Pergunte o que a credencial pode fazer e onde pode correr, não onde escondê-la no bundle.

Propriedade Credencial publicável / navegador Credencial de servidor
Ambiente previsto Navegador ou SDK cliente Backend fiável
Visível no cliente Possivelmente sim Nunca
Modelo de segurança Capacidade restrita + origem aprovada + sessão breve quando suportada Segredo bearer
Risco principal Reutilização não autorizada ou abuso de quota Comprometimento de conta ou dados

Os nomes variam, mas o padrão é comum. A Kaleidr usa chaves publicáveis e de servidor (Auth & Scopes). O Mapbox distingue âmbitos públicos e secretos e exige pedidos com tokens secretos no servidor (Usar Mapbox com segurança). A Google Maps Platform usa restrições de aplicação e API e recomenda proteger credenciais de serviços Web, com OAuth 2.0 quando suportado entre servidores (Orientações de segurança). Credenciais cliente devem ser concebidas para exposição; as do servidor, para segredo.

Como funcionam as chaves da Kaleidr?

A documentação atual define duas formas no mesmo sistema de organização e capacidades. Chaves publicáveis usam kld_pk_live_… em HTML, SDK, <kaleidr-map> e integrações Web. O SDK troca a chave por uma sessão breve vinculada à origem, em vez de usar a cadeia como bearer permanente. Chaves de servidor usam kld_sk_live_… apenas em servidores fiáveis, normalmente como Authorization: Bearer … ou X-Api-Key: …. São bloqueadas no navegador e não recebem permissão CORS (CORS & Allowed Origins). Nunca coloque uma chave de servidor no cliente nem trate uma variável pública como armazenamento secreto.

Origens permitidas devem ser origens simples, sem caminho nem barra final: https://app.example.com, não https://app.example.com/maps. A Kaleidr exige HTTPS, exceto em testes locais em localhost ou 127.0.0.1. A correspondência exata importa: raiz, www, app, admin e pré-visualização são origens distintas. A restrição reduz reutilização indevida, mas não substitui manter segredos fora do cliente.

Como diferem CORS, autenticação, âmbito e autorização?

CORS controla se o navegador pode ler uma resposta entre origens. Autenticação identifica o chamador. O âmbito determina se a credencial pode usar uma capacidade. A autorização da aplicação anfitriã decide que utilizador ou inquilino acede a registos privados. A Kaleidr pode aceitar preflight, mas só devolve Access-Control-Allow-Origin para uma origem autorizada; chaves de servidor não recebem CORS. 401 costuma indicar credencial ausente, inválida, expirada ou revogada. 403 indica credencial válida sem permissão; a Kaleidr usa insufficient_scope quando falta a capacidade da rota. Trate-os separadamente no diagnóstico e monitorização.

Quatro camadas separam controlo de origem, autenticação, âmbitos de capacidade e autorização do utilizador.

Como criar, guardar, rodar e revogar credenciais?

Aplique menor privilégio: conceda apenas os âmbitos necessários. O Mapbox recomenda âmbitos mínimos e apenas públicos no navegador; a Google recomenda restrições de aplicação e API limitadas às APIs usadas. Não partilhe uma credencial entre desenvolvimento, pré-visualização e produção. Chaves separadas reduzem o raio de impacto e tornam a rotação mais segura. O Mapbox recomenda tokens por ambiente ou cliente; a Google, chaves por aplicação (Gestão de tokens).

Novas chaves Kaleidr são mostradas uma vez; copie-as imediatamente para um gestor de segredos. Guarde chaves de servidor num gestor ou ambiente protegido, nunca em repositórios públicos ou bundles. Em CI/CD, injete segredos na implementação, mascare-os nos registos e evite imprimir o ambiente. Registe ID, estado e origem; oculte cabeçalhos e valores. Para rodar, crie e restrinja uma substituição, implemente, verifique tráfego e só depois revogue a anterior—mais depressa se comprometida. Quotas também controlam segurança: uso é medido por organização e streaming limita concorrência (Quota & Rate Limits). Trate 429 de forma diferente de 401 e 403; aplique espera progressiva.

// Unsafe: never ship a server key to the browser
const SERVER_KEY = "YOUR_KALEIDR_SERVER_KEY";
// Safer browser pattern: publishable key + SDK session exchange
Kaleidr.mount("#map", {
  publishableKey: "kld_pk_live_REPLACE_ME"
});
// Safer backend pattern: server key stays on the host
const response = await fetch("https://api.example.com/resource", {
  headers: {
    Authorization: `Bearer ${process.env.KALEIDR_SERVER_KEY}`
  }
});

Ciclo de vida das credenciais, da criação e restrição à implementação, monitorização, rotação e revogação.

Como separar autenticação da plataforma e da aplicação?

O padrão recomendado usa no navegador uma chave publicável para funções públicas do SDK através de uma origem aprovada; pedidos autenticados seguem para o backend. Este gere identidade, pertença ao inquilino, autorização de objetos, dados privados e chave de servidor num gestor, chama a plataforma servidor a servidor e devolve apenas campos aprovados. Chaves publicáveis não autenticam utilizadores; chaves de servidor não autorizam linhas da base de dados. Segundo a documentação, um mapa Viewer publicado é protegido por ligação partilhada e não exige chave. Ainda assim, trate a ligação como controlo de acesso e não envie dados privados por uma vista pública irrestrita. CSP e HTML seguro são complementares; o Mapbox alerta para XSS por HTML não fiável em pop-ups e recomenda texto.

Arquitetura multi-inquilino onde o SDK usa chave publicável e operações privadas passam por backend com autorização e chave secreta.

Que erros devem ser evitados?

Erro Risco Melhor abordagem
Enviar chave de servidor em JavaScript Roubo Chave publicável ou proxy backend
Tratar CORS como autenticação Clientes não Web contornam a suposição Autenticar cada pedido protegido
Usar uma chave em todo o lado Grande raio de impacto Separar ambientes e aplicações
Dar todos os âmbitos Privilégio excessivo Aplicar menor privilégio
Adicionar caminhos à lista de origens Correspondência falha Usar scheme://host[:port]
Registar cabeçalhos de autorização Segredos vazam Ocultar credenciais
Usar chave publicável como identidade Utilizadores indistinguíveis Autenticação real do utilizador
Supor que API protege linhas privadas Dados podem vazar Autorização da aplicação
Rodar sem verificar tráfego Falha em produção Implementar substituição primeiro
Ignorar 429 Tempestades de repetição e má UX Recuar e monitorizar quota

Em falhas no navegador, verifique origem, HTTPS, tipo de chave, âmbito e ordem de troca antes de assumir indisponibilidade. No servidor, verifique tipo, ambiente, âmbito, injeção e revogação acidental.

Veredito final

A segurança começa com uma decisão: não usar o mesmo modelo no navegador e backend. O navegador requer credenciais exponíveis limitadas por origem, âmbito, duração ou controlos equivalentes; o backend exige segredos em infraestrutura fiável. Acrescente menor privilégio, isolamento, autorização, monitorização e rotação. A Kaleidr segue o padrão: chaves publicáveis são limitadas por origem e trocadas por sessões breves; chaves de servidor são bearer para chamadas servidor a servidor e bloqueadas no navegador. Essa fronteira é mais importante do que tentar esconder uma chave no frontend.

Proteja a sua API com a documentação Kaleidr

Reveja tipos de chave, âmbitos, regras de origem e comportamento antes da implementação. Leia Kaleidr Auth & Scopes e continue na documentação para programadores para SDK e rotas da Platform API.

Perguntas frequentes

O que é autenticação de API de mapas?

É o mecanismo que identifica a aplicação ou serviço que acede a APIs de mapas, locais, mosaicos, rotas ou dados espaciais. Inclui chaves, tokens, sessões, bearer e OAuth.

Uma chave API pode ser usada com segurança no navegador?

Só se o fornecedor a conceber para cliente. Deve ter restrições de origem, âmbitos públicos, aplicação ou sessão breve. Um segredo de servidor nunca deve aparecer no navegador.

Uma chave publicável é secreta?

Não. A segurança não deve depender de ocultar a cadeia, embora exija restrições e monitorização.

Uma chave de servidor é secreta?

Sim. Deve permanecer no backend e não aparecer em HTML, bundles JavaScript, webviews, repositórios públicos ou armazenamento cliente.

CORS é autenticação?

Não. CORS controla a leitura entre origens; autenticação identifica o chamador e autorização define o que pode fazer.

Qual é a diferença entre 401 e 403?

401 costuma significar credencial ausente, inválida, expirada ou revogada. 403 significa credencial válida sem permissão.

Devo separar chaves de desenvolvimento e produção?

Sim. Reduz o raio de impacto, simplifica restrições, melhora visibilidade e torna a rotação mais segura.

Como rodo uma chave API?

Crie e restrinja uma substituição, implemente, verifique tráfego e só então revogue a anterior. Acelere se houver comprometimento.

O Kaleidr Viewer exige chave API?

A documentação atual indica que mapas Viewer publicados são protegidos por ligação partilhada e não exigem chave.

Como protege a Kaleidr as integrações Web?

Usa uma chave publicável com lista de origens; o SDK troca-a por sessão breve vinculada à origem. Chaves de servidor são bloqueadas no navegador e destinadas a chamadas entre servidores.

Referências

@misc{ietf_rfc9110_2026,
  title  = {HTTP Semantics (RFC 9110)},
  author = {{IETF}},
  note   = {Accessed 17 August 2026},
  url    = {https://www.rfc-editor.org/rfc/rfc9110}
}

@misc{ietf_rfc6750_2026,
  title  = {The OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750)},
  author = {{IETF}},
  note   = {Accessed 17 August 2026},
  url    = {https://www.rfc-editor.org/rfc/rfc6750}
}

@misc{whatwg_fetch_cors_2026,
  title  = {Fetch Standard},
  author = {{WHATWG}},
  note   = {CORS protocol; accessed 17 August 2026},
  url    = {https://fetch.spec.whatwg.org/#http-cors-protocol}
}

@misc{kaleidr_auth_scopes_2026,
  title  = {Auth and Scopes},
  author = {{Kaleidr}},
  note   = {Kaleidr Developer Docs; accessed 17 August 2026},
  url    = {https://docs.kaleidr.com/platform-api/auth-and-scopes}
}

@misc{kaleidr_cors_origins_2026,
  title  = {CORS and Allowed Origins},
  author = {{Kaleidr}},
  note   = {Kaleidr Developer Docs; accessed 17 August 2026},
  url    = {https://docs.kaleidr.com/platform-api/cors-and-allowed-origins}
}

@misc{kaleidr_quota_2026,
  title  = {Quota and Rate Limits},
  author = {{Kaleidr}},
  note   = {Kaleidr Developer Docs; accessed 17 August 2026},
  url    = {https://docs.kaleidr.com/platform-api/quota-and-rate-limits}
}

@misc{mapbox_token_management_2026,
  title  = {Token Management},
  author = {{Mapbox}},
  note   = {Accessed 17 August 2026},
  url    = {https://docs.mapbox.com/accounts/guides/tokens/}
}

@misc{mapbox_secure_2026,
  title  = {How to Use Mapbox Securely},
  author = {{Mapbox}},
  note   = {Accessed 17 August 2026},
  url    = {https://docs.mapbox.com/help/dive-deeper/how-to-use-mapbox-securely/}
}

@misc{google_maps_security_2026,
  title  = {Google Maps Platform Security Guidance},
  author = {{Google}},
  note   = {Accessed 17 August 2026},
  url    = {https://developers.google.com/maps/api-security-best-practices}
}