- 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
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:- Tenant A e Tenant B usam chaves de API diferentes.
- Tenant A e Tenant B podem ter configurações de cota diferentes.
- Tenant A e Tenant B podem ter políticas diferentes.
- 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.- 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 palavraconfidential.
- O Tenant A falha porque
confidentialestá bloqueado na política do Tenant A. - O Tenant B não herda a política do Tenant A.
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 A começa a receber
429antes. - O Tenant B continua tendo sucesso porque possui uma chave diferente e uma cota diferente.
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.conv_tenant_a_123.
O Tenant A pode lê-la:
- 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 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
429diferentes. - 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.
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-Ofidentifica 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.
- Envie
Authorization: Bearer <mka1-api-key>em todas as solicitações do lado do servidor. - Adicione
X-On-Behalf-Ofquando a solicitação pertencer a um de seus usuários finais. - Use
POST /api/v1/authentication/api-keys/exchange-tokenquando outro serviço precisar receber um token de curta duração em vez de sua chave de API bruta.
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 enviaX-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.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.audience: a URL exata do serviço que deve aceitar o JWTexternalUserId: o ID de usuário final colocado no assunto do JWTexpiresIn: duração do token em segundos, de300a2592000permissions: um subconjunto opcional das permissões da chave de API
ak: o ID da chave de API usado para pesquisa e aplicação de limite de taxasub: sua identidade delegada de usuário finalaud: o serviço que deve aceitar o tokenpermissions: 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ê enviarX-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
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
429faz parte do caminho de autenticação, não é um erro de modelo downstream
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, comouser_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 comoX-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
X-User-ID, X-Api-Key-ID e X-Exchange-JWT-External-User-ID após a validação do gateway.