Skip to main content
No MKA1, o limite prático de tenant é:
  • uma chave de API de conta distinta
  • um ID de usuário final delegado opcional via X-On-Behalf-Of
  • propriedade e uso de recursos downstream registrados nesse contexto autenticado
Use o passo a passo abaixo quando quiser verificar que dois tenants estão isolados um do outro na prática. Ele fornece um fluxo exato de Tenant A / Tenant B que você pode executar de ponta a ponta.

Verifique o isolamento de tenants na prática

Trate cada tenant como uma conta separada com sua própria chave de API. O objetivo é mostrar quatro coisas:
  1. Tenant A e Tenant B usam chaves de API diferentes.
  2. Tenant A e Tenant B podem ter configurações de cota diferentes.
  3. Tenant A e Tenant B podem ter políticas diferentes.
  4. Um recurso criado no Tenant A não é acessível no Tenant B.

Etapa 1: defina dois tenants

Comece com duas chaves de API separadas.
Se você já tiver duas chaves de produção ou staging, poderá usá-las diretamente. Se precisar provisionar duas chaves com limites diferentes para a demonstração, crie-as separadamente.
Isso estabelece imediatamente as duas primeiras partes do isolamento:
  • Tenant A e Tenant B não compartilham uma chave.
  • Tenant A e Tenant B não compartilham a mesma configuração de cota.

Etapa 2: configure políticas diferentes para cada tenant

Agora atribua aos dois tenants políticas de proteção diferentes. Configure o Tenant A para bloquear a palavra confidential.
Configure o Tenant B com uma política diferente.
Em seguida, teste o mesmo conteúdo em ambos os tenants. O Tenant A deve bloquear isto:
O Tenant B deve avaliar o mesmo conteúdo com base em sua própria política, em vez da política do Tenant A:
O resultado esperado é:
  • O Tenant A falha porque confidential está bloqueado na política do Tenant A.
  • O Tenant B não herda a política do Tenant A.
Esta é a demonstração prática mais clara de políticas independentes por tenant.

Etapa 3: demonstre cotas separadas

Após criar duas chaves com limites diferentes, envie o mesmo tipo de solicitação pelas duas chaves. O Tenant A usa a chave com limite baixo:
O Tenant B usa a chave com limite mais alto:
O resultado esperado é:
  • O Tenant A começa a receber 429 antes.
  • O Tenant B continua tendo sucesso porque possui uma chave diferente e uma cota diferente.
Isso mostra que os tenants não compartilham um único limitador global.

Etapa 4: demonstre o isolamento de recursos

Crie um recurso no Tenant A. Uma conversa é um exemplo simples porque ela fica visível pela API pública.
Suponha que a resposta retorne conv_tenant_a_123. O Tenant A pode lê-la:
O Tenant B não deve conseguir ler o mesmo recurso:
Você também pode mostrar o isolamento de listagem:
O Tenant B não deve ver a conversa do Tenant A em sua lista. Esta é a prova prática de enclave de tenant:
  • a mesma superfície de API é usada
  • a mesma plataforma é usada
  • mas identidade, política, cota e propriedade de recursos são aplicadas separadamente

Etapa opcional 5: mostre registros de uso separados

Se quiser mais um ponto de prova visível, consulte o uso separadamente para cada tenant.
O objetivo desta etapa não é apenas cobrança. Ela mostra que a plataforma registra a atividade no contexto autenticado do tenant, em vez de mesclar todo o tráfego em uma única conta indiferenciada.

O que este passo a passo comprova

Se você executar o passo a passo acima, poderá fazer estas afirmações exatas:
  • Chaves independentes: Tenant A e Tenant B se autenticam com chaves de API diferentes.
  • Cotas independentes: Tenant A e Tenant B podem ter configurações de limite de taxa diferentes e receber comportamentos 429 diferentes.
  • Políticas independentes: Tenant A e Tenant B podem definir proteções diferentes e obter resultados diferentes para o mesmo conteúdo.
  • Isolamento real: Um recurso criado no Tenant A não pode ser lido no Tenant B.
A superfície de API é compartilhada, mas o contexto autenticado do tenant, a aplicação de cotas, a configuração de políticas e a propriedade dos recursos não são compartilhados.

Como o modelo de identidade funciona internamente

A autenticação na API MKA1 tem três camadas:
  • Sua chave de API identifica sua conta.
  • X-On-Behalf-Of identifica o usuário final em nome de quem seu servidor está agindo.
  • Um JWT trocado fornece a um serviço downstream uma credencial de curta duração derivada dessa chave de API e do contexto de usuário final.
A versão curta é simples:
  • Envie Authorization: Bearer <mka1-api-key> em todas as solicitações do lado do servidor.
  • Adicione X-On-Behalf-Of quando a solicitação pertencer a um de seus usuários finais.
  • Use POST /api/v1/authentication/api-keys/exchange-token quando outro serviço precisar receber um token de curta duração em vez de sua chave de API bruta.
Se você precisar apenas do padrão de uso, comece pelo guia de autenticação. Esta página explica o que acontece depois que a solicitação chega ao gateway.

O caminho da solicitação

A API MKA1 não solicita que os serviços downstream validem tokens bearer por conta própria. As solicitações passam primeiro pelo gateway, e o gateway injeta cabeçalhos de identidade confiáveis para o restante da plataforma. Quando você também envia X-On-Behalf-Of, o gateway mantém essa identidade delegada de usuário final com a solicitação: A troca de JWT adiciona uma etapa extra:

Os três padrões principais

Padrão 1: solicitações somente de backend

Use este padrão quando seu backend estiver chamando a API MKA1 para seu próprio fluxo de trabalho e não houver um usuário final separado a ser rastreado.

Padrão 2: integração de servidor para múltiplos usuários

Use este padrão quando seu backend estiver fazendo a solicitação para um dos usuários da sua própria aplicação.
Este é o padrão correto quando você deseja que solicitações, arquivos, respostas, conversas e uso permaneçam associados a um ID de usuário final estável do seu próprio sistema.

Padrão 3: troque sua chave de API por um JWT de curta duração

Use este padrão quando outro serviço precisar receber um token com duração limitada em vez de sua chave de API de longa duração.

Quais cabeçalhos você envia versus quais cabeçalhos a plataforma injeta

Cabeçalhos que você envia

Cabeçalhos confiáveis injetados dentro da plataforma

Os clientes enviam Authorization e, às vezes, X-On-Behalf-Of. Os clientes não enviam diretamente os cabeçalhos internos X-User-ID ou X-Api-Key-ID. Eles são derivados pelo gateway após a validação.

Como a troca de JWT funciona

POST /api/v1/authentication/api-keys/exchange-token transforma uma chave de API de longa duração em um token de curta duração para outro serviço.
O caminho singular legado POST /api/v1/authentication/api-key/exchange-token (SDK: auth.apiKey.getJwtFromKey()) está obsoleto e será removido em uma versão futura. Use POST /api/v1/authentication/api-keys/exchange-token (SDK: auth.apiKeys.exchangeToken()) em seu lugar.
O corpo da solicitação tem quatro campos relevantes:
  • audience: a URL exata do serviço que deve aceitar o JWT
  • externalUserId: o ID de usuário final colocado no assunto do JWT
  • expiresIn: duração do token em segundos, de 300 a 2592000
  • permissions: um subconjunto opcional das permissões da chave de API
A resposta é:
Uma carga útil de token decodificada tem esta aparência:
Estas declarações são as mais importantes:
  • ak: o ID da chave de API usado para pesquisa e aplicação de limite de taxa
  • sub: sua identidade delegada de usuário final
  • aud: o serviço que deve aceitar o token
  • permissions: o conjunto de capacidades permitidas para esse token

Como o escopo de tenant funciona na prática

A decisão de design mais importante é que a identidade do usuário final é explícita. Se você enviar X-On-Behalf-Of: user_123, os serviços downstream poderão manter recursos e uso associados a esse usuário. Isso importa para:
  • conversas salvas
  • respostas armazenadas
  • arquivos e armazenamentos de vetores
  • uso por usuário e trilhas de auditoria
  • verificações de autorização delegada
Quando você omite X-On-Behalf-Of, as solicitações são executadas como trabalho de conta somente de backend. Quando você o inclui, a solicitação se torna uma solicitação delegada para um usuário final específico. Use um identificador estável do seu próprio sistema. Não use um nome de exibição mutável, a menos que ele já seja seu ID de usuário canônico.

Limites de taxa e o que os chamadores devem esperar

As chaves de API podem ter configurações personalizadas de limite de taxa. O caminho de autenticação aplica limites de taxa por chave de API antes que a solicitação chegue aos serviços downstream. Na prática, isso significa:
  • duas chaves de API diferentes podem ter limites diferentes
  • uma chave de API sobrecarregada não implica que outra chave esteja esgotada
  • um 429 faz parte do caminho de autenticação, não é um erro de modelo downstream
O fluxo de troca de token também permanece vinculado à chave de API de origem. Isso significa que um JWT downstream ainda herda o comportamento de limite de taxa no nível da conta associado à chave de origem. Se quiser pools de tráfego separados para aplicações ou cargas de trabalho diferentes, use chaves de API separadas.

Erros comuns

Enviar X-On-Behalf-Of a partir de código de navegador

Não exponha sua chave de API em código de navegador ou cliente móvel. Seu servidor deve chamar a API MKA1 e anexar X-On-Behalf-Of nela.

Usar um identificador de usuário final instável

Use um ID interno durável, como user_123. Não alterne entre endereços de e-mail, nomes de usuário e nomes de exibição para o mesmo usuário.

Usar o audience incorreto em JWTs trocados

O serviço downstream deve validar o token para o público pretendido. Defina audience como a URL real do serviço que deve aceitar o JWT.

Solicitar permissões mais amplas que a chave de API

O endpoint de troca de token permite apenas um subconjunto das permissões da chave de API. Se você solicitar uma permissão que a chave de API não possui, a troca falhará.

Tratar cabeçalhos internos propagados como cabeçalhos públicos de cliente

Cabeçalhos como X-User-ID e X-Api-Key-ID fazem parte do caminho confiável de solicitação interna. Eles não substituem Authorization.

Apêndice do caminho de código

Os snippets a seguir mostram a principal forma de implementação por trás do comportamento público.

O Kong valida o token bearer e injeta cabeçalhos confiáveis

É por isso que os serviços downstream podem confiar em X-User-ID, X-Api-Key-ID e X-Exchange-JWT-External-User-ID após a validação do gateway.

O endpoint de troca de token verifica a chave de API, verifica permissões e assina o JWT

Em seguida, ele assina uma carga útil que inclui o ID da chave de API, o assunto do usuário final delegado e permissões filtradas:

Os serviços downstream leem a identidade de cabeçalhos confiáveis

É por isso que os serviços por trás do gateway geralmente não analisam tokens bearer por conta própria. Em vez disso, eles operam com um contexto de identidade validado.

Próximas etapas

Use o guia de autenticação para a versão curta e exemplos de copiar e colar. Use a visão geral da API para inspecionar a referência gerada e a especificação OpenAPI ativa. Em seguida, consulte as páginas de endpoint relevantes na Referência da API para obter detalhes exatos de solicitação e resposta.