Olá pessoal;
Estou com um problema e gostaria de compartilhar com o grupo. É o seguinte :
Hoje temos alguns projetos que utilizam uma autenticação via LoginModule (JAAS) no AD todos utilizando o JSF. Bom, tudo fucionando perfeitamente. No entanto, nesta semana me deparei com um certo problema:
Fui criar uma forma de “customizar” a autenticação, de que forma ? O programador pode criar um formulário e um ManageBean que recebe um “login” e “senha” e o mesmo faz a autenticação no LoginModule. Blz… até aí tudo certinho… mas nos testes realizandos acontece que … a autenticação é feita no JBoss, ou seja ele FAZ a autenticação no JBoss, mas quando retorna para a aplicação JSF o usuário não esta autenticado.
Como assim ??
Se eu utilizar, a implementação PADRÃO do JAAS com JSF e executar a seguinte linha:
FacesContext fc = FacesContext.getCurrentInstance();
fc.getExternalContext().isUserInRole("logado");
… o resultado será TRUE, ou seja o usuário esta autenticado e tem a roles “logado”.
Com a “CustomImplementation”, executando a mesma linha:
FacesContext fc = FacesContext.getCurrentInstance();
fc.getExternalContext().isUserInRole("logado");
… o resultado é FALSE ou seja o JSF não sabe que o usuário esta autenticado, MAS está.
No JAAS, tem o que chamamos de Subject que encapsula o objeto Principal e Roles. Utilizando a classe do JBoss,
SecurityAssociation, tem como forçar a mudança do Subject no JBOSS… Bom mas, não conheço como posso fazer
isso no JSF.
Via JSF, eu consigo verificar o objeto Principal desta forma:
FacesContext fc = FacesContext.getCurrentInstance();
fc.getExternalContext().getUserPrincipal();
… mas como modificar o Principal do JSF ? E se eu manipular o objeto ExternalContext, até consegui fazer isso… mas não consigo setar este objeto no FacesContext.
Bom… esta situação é complexa…
qualquer idéia, sugestões, etc… serão bem-vindas !!!
Valeu !!!