[Livro Java EE - JAAS] - 403 forbidden - Single Sign On

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?

Obrigado

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(request.getUserPrincipal().getName());
	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"));

Oi Carlos,

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.

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="/" />
< /host>
< /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.

        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />

De qualquer forma, vou dar uma olhada no KeyCloak. Valeu a dica.

1 curtida

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 :).