[Livro Java EE - JAAS] - 403 forbidden - Single Sign On - Livros - Editora Casa do Código
[Livro Java EE - JAAS] - 403 forbidden - Single Sign On
carloseduardoxpto Dezembro 1, 2015, 2:18pm #1
Criei dois sistemas para utilizar no Wildfly 8.2.1 - Seguranca.war e Ecommerce.war. O sistema de Seguranca autentica no Wildfly via JAAS, conforme explicado no capítulo 12 do livro Java EE. Todos os passos citados no livro funcionam perfeitamente, e as roles são carregadas.
Contudo, no sistema Ecommerce.war, ao colocar as security-constraint no web.xml, o sistema acusa 403 - forbidden. Verifiquei que as roles não são carregadas neste sistema, mas apenas no sistema de Seguranca, que fiz a autenticação. Prova disso que, ao executar request.getUserPrincipal() no sistema Ecommerce, retorna null, enquanto que no sistema Seguranca retorna normalmente o usuario.
Eu acredito que seja necessário realizar alguma configuração no standalone-full.xml, para que o login-module criado se estenda para todos os outros sistemas da pasta deployments, mas após algumas pesquisas, não encontrei resultado.
Alguém poderia ajudar?
carloseduardoxpto Dezembro 1, 2015, 2:26pm #2
Cada sistema possui o seu conjunto de roles. O sistema de Seguranca possui as roles SEG_ADMIN e SEG_MENU, e o sistema Ecommerce possui as roles ECO_ADMIN, ECO_CADASTRO e ECO_CONSULTA. Já averiguei pelo sistema de Seguranca que, ao logar, as roles ECO_ADMIN e SEG_MENU são carregadas. Com isso, creio que não existe nenhum problema com falta de roles.
System.out.println("type = " + request.getUserPrincipal().getClass());
System.out.println(request.isUserInRole("ECO_ADMIN"));
System.out.println(request.isUserInRole("ECO_CADASTRO"));
System.out.println(request.isUserInRole("ECO_CONSULTA"));
System.out.println(request.isUserInRole("SEG_ADMIN"));
System.out.println(request.isUserInRole("SEG_MENU"));
alots.ssa Dezembro 1, 2015, 2:30pm #3
Você criou o arquivo jboss-web.xml na aplicação do ecommerce? Tem uma parte que eu não tenho certeza se entendi direito, então vou falar do mesmo jeito :). Você pode até aproveitar o login-module entre as duas aplicações, mas o usuário logado em uma não é automaticamente compartilhado na outra :/, você teria que fazer dois logins. Caso você precise de algo próximo ao Single Sign On, recomendo dar uma olhada no KeyCloak. Ele pode ser integrado ao Wildfly e outros servidores e já possui uma extensão para o JAAS também.
carloseduardoxpto Dezembro 1, 2015, 3:53pm #4
Olá Alberto, muito obrigado por ter respondido. Sua resposta me ajudou muito a encontrar a solução.
Como você disse, eu realmente precisei adicionar o jboss-web.xml no sistema Ecommerce, mas também precisei adicionar uma configuração no standalone-full.xml, que é a tag single-sign-on. Dessa forma, o conteúdo lá no standalone-full.xml ficou da seguinte forma:
< server name="default-server�>
< http-listener name="default� socket-binding="http�/>
< host name="default-host� alias="localhost�>
< location name="/" handler="welcome-content�/>
< filter-ref name="server-header�/>
< filter-ref name="x-powered-by-header�/>
< single-sign-on path="/" />
< /server>
Com isso, todas as roles e o usuário logado no seguranca se estenderam ao outro sistema (e quaisquer outros que porventura eu possa adicionar futuramente), que era exatamente o que eu precisava.
Eu trabalhei com Single Sign On no JBoss 4.2.3 há alguns anos atrás, e não precisava do jboss-web.xml em todos os sistemas, mas apenas no sistema que eu tinha a tela de login. Na época bastava adicionar a configuração abaixo no server.xml.
De qualquer forma, vou dar uma olhada no KeyCloak. Valeu a dica.
alots.ssa Dezembro 1, 2015, 4:13pm #5
Legal Carlos, legal essa propriedade! O KeyCloak vai ser mais útil se você quisesse que sistemas rodando em qualquer lugar pudessem compartilhar o usuário logado… Ele é literalmente um servidor de login :).