Estou tentando criar um login único para vários sistemas que usam Struts e rodam em um mesmo servidor Tomcat. A idéia é a seguinte: criar um novo sistema responsável por fazer o login do usuário e colocar um objeto na sessão que encapsule o seus dados relevantes. Em seguida, apareceriam links para os sistemas aos quais o usuário que logou pode acessar. Ao clicar no link, o navegador é redirecionado para o sistema correspondente, que faria uso daquele objeto da sessão que contém as informações do usuário. O problema é que parece que a sessão não é conservada neste caminho, e aí os dados vão para o espaço. Alguém tem alguma idéia de como consertar isto conservando o conteúdo da sessão?
COnservando a sessão entre aplicações diferentes
9 Respostas
Você terá que criar um sistema SSO (Single Sign On). Aqui na empresa fizemos isso. Tem um sistema chamado SSO e os sistemas que usam ele têm uma API do SSO. Ele trabalha basicamente com cookies.
Acho que deve ter algo open source disso.
Até já temos alguma coisa desenvolvida… Mas eu estava em dúvida quanto à segurança dos cookies, mais exatamente se alguem poderia falsificar um cookie. Talvez mesmo que as informações fossem criptografadas, será que alguém poderia copiar um cookie que representasse um usuário com muitos privilégios para restaurar quando ele quisesse? Não existiria alguma forma de exportar a sessão na navegação entre diferentes sistemas? Enfim, existe alguma forma eficiente e segura de compartilhar estas informações no lado do servidor?
A gente só mantém o nome do usuário no cookie, e a API na aplicação cliente do SSO se encarrega de carregar os dados do usuário na sessão.
Mas o cookie é um arquivo me disco, certo? E se alguém copiar o cookie (de outra pessoa) em algum momento para outro lugar no disco e depois restaurar quando quiser? Isto é possível?
Olha, a gente usa cookies que se expiram assim que o browser se fecha. Não tenho certeza sobre o nível de segurança dos cookies, ou se eles usam o id da sessão atual do usuário. O fato é que nunca detectamos problemas. Bom, mesmo porquê nosso segmento não é banco nem nada assim, mas tem infos que são um pouco confidenciais.
Seguindo a idea do Destro, vc grava apenas o nome do usuario no cookie, nada mais. Quando o cara loga em uma aplicacao, vc grava em uma tabela os dados do usuario e o horario em que ele logou.
Quando o cara for para outra aplicacao, vc verifica se ele tem o cookie e, se tiver, checa a tabela de sessoes para ver se ele ainda dentro do tempo limite da sessao.
No banco de dados, voce pode gravar algumas informacoes a mais para seguranca, como o ip da maquina em que o usuario logou. Assim, se alguem “roubar” o cookie dele, a probabilidade de ter sucesso em usar a conta sera bem menor.
Rafael
Beleza, vou fazer alguns testes neste sentido e depois eu posto aqui algum resultado interessante, se for o caso.
Muito obrigado pelas respostas.
Talvez ldap seja mais viável. Dá uma olhada em http://www.openldap.org
Alguem sabe se JAAS também cuida disso?