Boa noite pessoal,
Estou desenvolvendo uma aplicação cliente para um web service construído com Apache CXF, e estou com algumas dúvidas sobre a como proceder na parte de segurança (do cliente).
A aplicação servidora foi contruída com Apache CFX, Spring 3 e Hibernate. A aplicação cliente será construída inteiramente com JSF 2. A aplicação cliente não efetua nenhum acesso à base de dados, somente chamada aos serviços expostos, inclusive para validar usuários (login, por exemplo). Há, claro, um conjunto de páginas que somente podem ser acessados por usuários devidamente cadastrados.
Com isso, tenho algumas dúvidas sobre como implementar o controle de autenticação/autorização de usuários no lado cliente. Há algum tempo atrás trabalhei um pouco com a parte de segurança utilizando JAAS, mas, não sei se ainda é a melhor forma/mais recomendada. Pensei em utilizar spring-security, mas, lendo alguns tutoriais (getting started e os da Loiane), me surgiu a dúvida se ele é apropriado ao cenário descrito. Parece-me que é necessário efetuar a configuração do datasource no applicationContext-security.xml (ou qual seja o nome escolhido) ou declarar previamente os usuários e suas roles, ambos não posso fazer para a aplicação cliente. É possível configurar o spring-security para fazer a autenticação através de uma chamada a um método (ou um web service) ao invés do banco de dados? Ou realmente esta não é a melhor opção para o cenário?
Exemplos de configuração do spring-security, até onde entendi:
Declaração de usuários e roles direto no XML (não muito recomendado numa aplicação real, creio eu):
<authentication-provider>
<user-service>
<user name="user" password="user" authorities="ROLE_USER" />
<user name="admin" password="admin" authorities="ROLE_ADMIN" />
</user-service>
</authentication-provider>
Nota: eu vi que é possível criptografar estas senhas, usando Realms, por exemplo.
Utilização de um data source:
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="SELECT username, password, enable FROM usuario WHERE username=?"
authorities-by-username-query="SELECT Usuario_username as username, autorizacoes_nome as authority FROM usuario_autorizacao WHERE Usuario_username=?"
/>
</authentication-provider>
</authentication-manager>
Obrigada!