Design de Serviço SOA / Autenticação

Eu sou bastante novo para SOA e, portanto, experimentando por aí.

Atualmente, a parte que cria o maior problema para mim é a autenticação, meu pensamento atual envolve o seguinte:

O cliente envia algum tipo de mensagem de autenticação para o serviço de autenticação / usuário, este serviço consulta o banco de dados e se o usuário for encontrado e a senha for válida, ele responderá com um ID de sessão, esse ID será usado em todas as outras solicitações de autenticação este cliente.

Isso parece bastante ok para mim, mas eu não sei como devo lidar com os pedidos para outros serviços, pensei em três abordagens diferentes.

Cada serviço pergunta ao serviço de autenticação se a sessão é válida e, em caso afirmativo, em que funções o usuário está. O serviço de autenticação procura no banco de dados e responde de acordo.

O serviço de autenticação mantém todas as informações da sessão em memória ram e responde sem o db roundtrip para as solicitações.

O serviço de autenticação envia uma mensagem autorizada para um esb, o esb encaminha essa mensagem autorizada para todos os serviços e esses serviços armazenam em cache. Nenhuma solicitação adicional ao serviço de autenticação seria necessária. Se o usuário fizer logout ou suas funções forem alteradas, outra mensagem será enviada e processada por todos os serviços.

Eu acho que a primeira abordagem cria muita pressão sobre o serviço de autenticação / db, mas leva menos esforço para implementar.

O segundo ainda é muito fácil de implementar, mas a ênfase no serviço de autenticação permanece quase a mesma.

O terceiro é um pouco mais complicado de implementar, mas reduziria o tempo de resposta, já que não ocorrem viagens ao serviço de autenticação. No entanto, se houver muitas informações de sessão, essa abordagem falharia e a escalabilidade dificilmente seria fornecida.

questionAnswers(2)

yourAnswerToTheQuestion