Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Spring Security, autenticando aplicações?

Olá, comprrendi perfeitamente a parte de autenticação e autorização utilizando Spring security baseado no usuario, enha e token, mas spring security pode ajudar a autenticar uma aplicação ao ínves de um usuário? Vou explicar, eu tenho a aplicação "A" , a aplicação "B" e a aplicação "C" que são aplicações spring nomais, utilizando jpa,spring security, jwt e tal e tenho a aplicação "D" que atua como um serviço, a unica função do sistema "D" e enviar emails, as requisições de email são enviadas pelos sistemas A,B e C, o sistema D só pode receber requisições destes sistemas, preciso D garanta uma forma de atender a pedidos apenas de aplicações que ele reconheça o acesso, caso contrario qualquer pessoa do mundo poderia enviar email pelo postman pelo sistema D, mas a autenticação no sistema D deve ser por aplicação e não por usuario, Spring security tem algo que ajuda nesse sentido? se não qual uma boa forma de proceder?

3 respostas
solução!

Oi Ricardo,

Esse cenário é bem comum e tem duas principais soluções, sendo uma mais simples e outra mais complicadinha.

A mais complicada seria utilizar o protocolo OAuth: https://oauth.net/2

A mais simples, que eu recomendo pois seu cenário não é complexo, é fazer uma autenticação baseada em senha, na qual as requisições enviadas pelos clientes A, B e C devem levar um header com uma senha secreta, conhecida apenas por essas 3 aplicações, e o serviço D deve sempre validar se nas requisições que chegarem está vindo esse cabeçalho e se a senha está correta.

Não sei te dizer se tem alguma biblioteca que faz isso, mas para implementar na mão vai ser tranquilo, pois será apenas necessário enviar um header pelos clientes e fazer uma validação no servidor(D).

Bons estudos!

Pois é na realidade estou migrando várias aplicações monolíticas e 2 jars que iam dentro desse monolíto eu identifiquei que se encaixariam na definição de microserviços, pois esses dois jars são empacotados junto de quase todas as aplicações, um serviço mensageiro e um outro serviço que consulta na base da receita e como sempre trabalhei com JEE e aplicações monolíticas as vezes me perco um pouco nessa nova abordagem. A primeira solução com o auth2 tou deixando primeiramente nos sistemas A,B e C cada qual com sua autenticação acredito que uma arquitetura de login único agora só iria trazer mais complexidade no momento, essa segunda solução é bacana e inclusive é mais ou menos que se usa quando se uma arquitetura de nuvem, por exmplo no google cloud plataform que nos fornecem um token quando nos cadastramos, não é isso mais ou menos? acho que assim e configurando o cors corretamente acho que fica seguro sim, obrigado.

Esse header que você fala seria o header Authentication mesmo? podria utilizar a autenticação Basic mesmo? seria uma boa armazenar essa senha no bd?

É essa ideia mesmo :)

Pode ser o próprio header Authentication mesmo ou algum personalizado da aplicação, via basic mesmo.

Seria bom armazenar a senha no banco no servidor D e talvez utilizar algum esquema de cache, para nao ter que ficar fazendo select o tempo inteiro, já que essa senha raramente será atualizada.