Primeiro, a arquitetura de microsserviços é uma das principais modinhas que apareceram em TI. Fique longe o quanto puder. Se precisar dele, você estará em uma equipe cheia de gente com bastante conhecimento. Em hipótese alguma uma pessoa consegue lidar com tudo isso sozinho, e até mesmo não tem porque alguém sozinho tentar mexer com isso, em qualquer análise que se faça.

Reforço que quase ninguém precisa. Alguns dos maiores sites não usam e se dão muito bem, por exemplo Wikepedia, Instagram e os maiores ERPs do mercado. Se uma empresa precisa por organização de equipes, e raramente precisa mesmo, e algumas empresas estão voltando atrás até por isso, espere estar em uma equipe com centenas ou milhares de programadores.

Microsserviços é computação distribuída, que é considerado o problema mais difícil de resolver da computação, só pessoas com extraordinário conhecimento farão corretamente. É tão complicado que a maioria faz outra coisa, chama de microsserviços e acha que sabe fazer.

A comunicação entre eles costuma ser toda em rede interna, então o hacker não tem acesso e não precisa de maiores preocupações no software, só na infra. Se não for assim, já é um pouco preocupante, mas se ainda fizer sentido, a proteção é a mesma de qualquer outro site, pode ser com Oauth. Os detalhes dependem de como a pessoa deseja e o que ela está fazendo, não é uma forma universal.

Algumas informações que podem ajudar:

Faz sentido para você?

Espero ter ajudado.

Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

Por favor, não venha com o dogma que você prega no SOpt há anos, citando todos os seus links como se fossem lei e a maioria de 3, 5 anos atrás, ainda bem que aqui o downvote é bem diferente, não né?

Primeiro, a arquitetura de microsserviços é uma das maiores modinhas que apareceram em TI. Fique longe o quanto puder.

Errado, suponhamos que eu tenha um serviço distrbuído e uma das suas funções é escrever o output de algo processado em um bucket/banco/arquivo por exemplo. Por qual motivo eu teria o serviço X deployado em todas as minhas instancias quando eu poderia ter um serviço Y bem leve isolado lendo output de uma fila alimentada pelo serviço X fazendo isso? Utilizando assim muito menos recurso, tempo de resposta, não consumindo e alocando recurso do serviço X inteiramente.

Existem muitos e muitos casos, principalmente se você precisa lidar com API de terceiros, você vai confiar o seu serviço inteiro, que pode causar lentidão, bug dentre outras mil e uma coisas quando poderia ter essa feature de ir na API e alimentar um banco ou chamar outra API isoladamente e ter esse output pra ser processado no seu outro microserviço?

Ou que tal um serviço que lê seu banco de dados e coloca os dados em um redis para fácil acesso? Faria sentido eu fazer os dois no mesmo serviço? Eu posso ter um só pra escrever e outro só pra ler.

Microsserviços é computação distribuída, que é considerado o problema mais difícil de resolver da computação, só pessoas com extraordinário conhecimento farão corretamente.

Sim, você tem razão, isso era verdade há uns 6 ou mais anos atrás, como em seus posts.

Veja bem, dei exemplos básicos de uso, é óbvio que isso depende de caso para caso. Dizer que é certo ou errado, dificil ou fácil vale somente para você e exclusivamente você.

Sobre a dúvida do OP.

O que quero saber é como elas se comunicam, e como elas garantem que a requisição vem do serviço que a requisitou e não um hacker tentando imputar dados via api. como que eu sei que os dados do usuário que uma api está enviando ou solicitando da outra são dados válidos.

Existem diversas formas de previnir isso. Caso você só receba requisições do IP X, já é um bom começo, outro é criar um template de validação da requisição e você somente aceitará dados que deem match naquele template, você talvez possa limitar a quantidade de req/s se for o caso.

Nada nem nenhum serviço está passível a ser perfeito, vale você limitar ao máximo. Mas vamos imaginar que seguindo a ideia do amigo acima, você tenha tudo junto e seja hackeado, o estrago seria maior, né?

Enfim, não se prenda a dogmas, nem ao que eu disse, veja o que é melhor pra você, o que melhor te atende. Se você acha certo por um servidor web/api/aplicação tudo junto, vai lá, vai só disperdiçar recursos. Se você conseguir distrinchar sua aplicação em microserviços aonde cada uma é acionada por outra por algum evento, você fará algo muito melhor, mais dinamico, e caso haja falha em um processo, seu serviço inteiro não seria afetado, somente tal feature.

Um problema difícil de resolver fica magicamente fácil depois de 5 anos? Ou as pessoas só distorceram o conceito origonal para parecer que são boas nisso? Os maiores especialistas no assunto não estão escrevendo que o que eles disseram há anos não vale mais, só por preguiça? É só retórica. É uma maneira de pensar, cada um faz o que acha melhor, cada um ouve quem achar melhor, o lucro ou prejuízo é da pessoa. Não vou discutir suas afirmações, eu simplesmente não tenho mais paciência, essas coisas vão longe e não chegam a lugar algum, quem ler acredite em quem quiser. Eu tenho minha experiência que me diz o contrário do que você diz. Só em resumo, reafirmo a parte que eu digo "É tão complicado que a maioria faz outra coisa, chama de microsserviços e acha que sabe fazer". Por isso eu não responderei mais, já disse o que eu tinha que dizer, hoje me dou o direito de escolher quando o debate vale a pena. Ainda mais depois de ver como foi sua participação no SOpt e entender porque está falando de lá. Talvez esse entendimento seja parecido com o que tem sobre dogma e o que acha que é e o que não é.