Estou tendo dificuldades para escolher uma estratégia de autenticação decente / segura para uma arquitetura de microsserviço. A única publicação SO que encontrei no tópico é a seguinte: Logon único na arquitetura de microsserviço
Minha idéia aqui é ter em cada serviço (por exemplo, autenticação, mensagens, notificação, perfil etc.) uma referência única para cada usuário (logicamente, então o dele user_id
) e a possibilidade de obter o usuário atual id
se logado.
Das minhas pesquisas, vejo duas estratégias possíveis:
1. Arquitetura compartilhada
Nesta estratégia, o aplicativo de autenticação é um serviço entre outros. Mas cada serviço deve poder fazer a conversão session_id
=>, user_id
portanto, deve ser simples. Por isso, pensei em Redis, que armazenaria a chave: valor session_id:user_id
.
2. arquitetura de firewall
Nesta estratégia, o armazenamento da sessão realmente não importa, pois é tratado apenas pelo aplicativo de autenticação. Em seguida, o user_id
pode ser encaminhado para outros serviços. Pensei no Rails + Devise (+ Redis ou cache de memórias, ou armazenamento de cookies etc.), mas há inúmeras possibilidades. A única coisa importante é que o Serviço X nunca precisará autenticar o usuário.
Como essas duas soluções se comparam em termos de:
- segurança
- robustez
- escalabilidade
- fácil de usar
Ou talvez você sugira outra solução que não mencionei aqui?
Gosto mais da solução nº 1, mas não encontrei muita implementação padrão que me protegesse no fato de estar indo na direção certa.
Espero que minha pergunta não seja fechada. Eu realmente não sei onde mais perguntar.
desde já, obrigado
fonte
Respostas:
Com base no que entendi, uma boa maneira de resolvê-lo é usando o protocolo OAuth 2 (você pode encontrar um pouco mais de informações sobre isso em http://oauth.net/2/ )
Quando o usuário fizer login no aplicativo, ele receberá um token e, com esse token, poderá enviar para outros serviços para identificá-los na solicitação.
Exemplo de design de microsserviço em cadeia
Recursos:
fonte
Resposta curta: use a autenticação baseada em token do tipo Oauth2.0, que pode ser usada em qualquer tipo de aplicativo, como um aplicativo da Web ou aplicativo móvel. A sequência de etapas envolvidas para um aplicativo da Web seria então
O diagrama abaixo mostra os componentes que seriam necessários. Essa arquitetura que separa as APIs da Web e dos dados proporcionará uma boa escalabilidade, resiliência e estabilidade
fonte
O padrão de gateway da API deve ser usado para implementar isso usando o OpenID Connect. O usuário será autenticado pelo IDP e receberá o token JWT do servidor de autorização. Agora, o sistema de gateway da API pode armazenar esse token no banco de dados Redis e definir o cookie no navegador. O gateway da API usará o cookie para validar a solicitação do usuário e enviará o token para os microsserviços.
O API Gateway atua como um ponto de entrada único para todos os tipos de aplicativos clientes, como aplicativos públicos de scripts java, aplicativos tradicionais da Web, aplicativos móveis nativos e aplicativos clientes de terceiros na arquitetura Microservice.
Você pode encontrar mais detalhes sobre isso em http://proficientblog.com/microservices-security/
fonte
você pode usar o servidor 4 de identidade para fins de autenticação e autorização
você deve usar o Firewall Architecture para ter mais controle sobre segurança, robustez, escalabilidade e facilidade de uso
fonte