Como proteger Java Web Services com login e manuseio de sessões
-
23-09-2019 - |
Pergunta
Eu gostaria de proteger meu serviço da web (Java Metro) com um login.
Veja como estou planejando fazer isso:
As etapas necessárias ao ligar para um método de serviço da web são:
- Ligue para Login (Usuário, PWD), receba um token de sessão 1.1 Lembre -se do token
- Ligue para o ServiceMethod (token, arg1, arg2 ...)
- Web Service verifica se o token é conhecido, se não for reproduzido, de outra forma, prossiga
- logout ou tempo limite após x períodos de inatividade
Minhas perguntas: 1. Qual é a sua opinião sobre essa abordagem? isso faz sentido? 2. Existem bibliotecas que assumem o ônus de escrever um manuseio de sessão (talvez com a persistência do banco de dados para sobreviver a reinicializações de aplicativos)
(A solução deve ser simples e facilmente utilizável com clientes Java e .NET)
obrigado!
Solução
Isso é viável e eu vi serviços da Web usando uma abordagem semelhante. Mas eu não implementaria minha própria solução personalizada. Em vez disso, eu usaria um token de segurança da especificação WS-Security e, mais precisamente um token de nome de usuário (você obtém isso de Wsit que faz parte do metrô e, portanto, é interoperável com clientes .NET). Dê uma olhada em Este artigo Para uma introdução.
Atualizar: Mais dicas:
Implementando o perfil UsernameToken do WS-Security para serviços da Web baseados em metrô- O que há de novo em aprimoramentos de serviços da web (WSE) 3.0
- Autenticação do Web Service com UserNameToken no WSE 3.0
- Implementando a autenticação direta com UserNameToken no WSE 3.0
Não posso dizer que achei a segurança do WS muito amigável, mas, ainda assim, minha experiência é que o uso do WS-Security leva menos tempo do que a implementação de uma solução personalizada, é mais segura e é melhor escala (verificar o banco de dados em cada chamada tem um custo ).
Editar:
Corrigiu os dois primeiros links, porque estavam mortos. Não consegui encontrar um para o terceiro, mas acho que o segundo deveria cobrir isso.
Outras dicas
Não pule imediatamente para implementar isso você mesmo desde o início. Muitas estruturas J2EE contêineres / Java oferecem suporte para controle de login / acesso. Dê uma olhada na documentação da estrutura que você está usando atualmente.
Outra alternativa simples é implementar o controle de acesso em um servidor da web front-end; por exemplo, apache httpd atuando como um proxy reverso para o tomcat.
Eu pensei em experimentar Apache Shiro, Eu realmente não posso dizer se é bom. Parece bom embora.