Os microsserviços atrás de um gateway de API precisam verificar o token de acesso?

10

Eu tenho um monte de microsserviços que são acessíveis apenas externamente por meio de um API Gateway.

Meu gateway de API é configurado como um recurso OAuth e valida o token (verifica a assinatura etc.) antes de passar a solicitação a jusante para um ou mais microsserviços.

Embora meus microsserviços precisem do token para verificar escopos e reivindicações, agora é necessário que este serviço valide o token também?

Parece um pouco exagerado, mas não consigo encontrar nenhum conselho on-line sobre esse cenário.

A validação do token no gateway da API é boa o suficiente? Ou é uma prática recomendada validá-lo novamente mais tarde?

fml
fonte
1
Esses mesmos serviços estão acessíveis ao ignorar o gateway internamente ?
Greg Burghardt
I cannot find any advice online about this scenario.Porque depende de vários fatores que variam de projeto para projeto. Provavelmente na maioria dos desenvolvimentos que afirmam ser arquitetura MS, eles não precisam disso. Além disso, nessas arquiteturas, deve haver um servidor de autenticação que faça isso em vez dos serviços (e em vez do gateway, é claro). É o servidor de autenticação que permite que a solicitação seja aprovada ou não.
LAIV

Respostas:

3

Se alguma chamada interna puder ignorar o gateway, valide o token em cada microsserviço ou force todas as chamadas - internas e externas - a passar pelo gateway.

Pessoalmente, eu também não confiaria em chamadas internas. Faça com que eles passem pelo gateway, até o ponto de limitar o tráfego por meio de regras de firewall. Saiba quem está falando com quem e por quê. Isso ajuda a limitar sua superfície de ataque se alguém violar sua rede.

Isso introduz um ponto único de falha, mas esse risco pode ser atenuado pelos servidores de balanceamento de carga e pela disponibilidade de servidores de failover em caso de problemas catastróficos.

Por outro lado, se todo serviço validar o token, e qualquer coisa sobre o processo de validação for alterada, você precisará atualizar os serviços N + 1.

Greg Burghardt
fonte
Ouvi o argumento de que "você também não pode confiar no tráfego interno". Mas expor um aplicativo a um número (relativamente) pequeno de usuários em uma intranet está muito longe de expor o mesmo aplicativo à Internet pública. É essencialmente o mesmo que a diferença entre um ímã de alto-falante e um ciclotron.
Robert Harvey
2
@RobertHarvey: Eu acho que a justificativa que ouvi sobre "não confie no tráfego interno" não é tanto o tráfego legítimo, mas o isolamento da rede em caso de invasões. Especialmente se o seu sistema manipular informações de identificação pessoal, saúde, financeiras ou confidenciais. Se alguém invade, é limitado no que mais pode conversar.
22418 Greg Greghardt
Se alguém entrar no seu sistema, a validação do token seria o menor dos seus problemas. Se você deve ou não validar o token dentro de uma rede confiável (e não acessível por estrangeiros) pode depender do tipo de validação que fazemos e se houver outra vez não executando a validação. Como por exemplo, desempenho. Voltar ao seu raciocínio. Você implementaria o TLS em uma rede privada? Você criptografaria a comunicação entre dois componentes sendo executados próximos um do outro? A resposta provável é depende .
LAIV