Obtendo IP Cliente dentro de um LoginModule JAAS  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
souzatg
HelloWorld

Membro desde: 17/05/2006 10:01:08
Mensagens: 11
Localização: São Paulo SP
Offline

Olá pessoal, boa tarde!
Estou precisando de uma ajudinha dos Gurus hehe...

Preciso desenvolver um módulo de Login JAAS que irá autenticar usando um Web Service que trabalha com o repositório central de SSO. O problema que tenho é que o mesmo recebe como parâmetro (não sei por qual motivo, mas enfim) o IP da máquina cliente que está tentando se autenticar, assim como o domínio e o usuário que esta Workstation está logada na Rede Windows (Active Directory), ou seja, dentro do método login() do LoginModule customizado eu tenho que encontrar o IP, usuário e domínio da estação que está tentando entrar.
Isto é possível? Existe algum jeito de saber quais estes dados através do LoginModule, ou até fazer um "bacalhau" usando um Filter ou coisa parecida? Apesar que se possível eu prefiro manter a idéia de usar JAAS ao invés de um Filter, para usar o padrão de mercado e facilitar a plugabilidade né...

Agradeço desde já!
Abraços!


This message was edited 1 time. Last update was at 12/02/2008 12:50:02


Thiago Souza
[Yahoo!] [MSN]
Sokoban
Thread.start()
[Avatar]

Membro desde: 18/12/2006 11:53:53
Mensagens: 43
Offline

Estou com um problema muito parecido, só que ao invés de precisar mandar o IP do cara como parâmetro, eu preciso passar o SessionID.

Pelo visto é necessário implementar um novo CallBack para o terceiro parâmetro na mão...

Mas o que mais além disso precisa ser feito ?

Alguem aí tem alguma idéia de como adicionar parâmetros extras na autenticação do JAAS ?

This message was edited 2 times. Last update was at 14/03/2008 13:52:57

sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

não entendi muito bem qual seria o problema... loginmodules podem ser fabricados. basta implementar um.
Quanto ao ip basta usar InetAdress . Cuidado com o 127.0.0.1 que sempre existe.
Quando ao sessionID, sessionID do quê ? do servidor web ? Vc pode pegar usando o session. Para fazer isso dentro do loginmodule vc previsa de uma ginastica. implemente um session listener que o informa quando as sessções são criadas e destruidas. Um objeto deve ouvir isso. o login module deve consultar esse objeto. O problema tlv seja saber qual id pertence a qual module de login. sem mais detalhes é complicado saber...

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
Sokoban
Thread.start()
[Avatar]

Membro desde: 18/12/2006 11:53:53
Mensagens: 43
Offline

sergiotaborda wrote:não entendi muito bem qual seria o problema... loginmodules podem ser fabricados. basta implementar um.
Quanto ao ip basta usar InetAdress . Cuidado com o 127.0.0.1 que sempre existe.
Quando ao sessionID, sessionID do quê ? do servidor web ?


Seguinte, aparentemente tanto eu quanto o usuário souzatg precisamos enviar um parâmetro a mais para o LoginModule.
E essa é a dúvida comum à ambos.

Agora, a razão de eu precisar fazer isto é o seguinte (espero não atrapalhar o tópico com minha dúvida, qualquer coisa me dêem um toque que eu abro em um tópico diferente):

Estou tendo o velho e famigerado "The requested resource (/.../j_security_check) is not available", várias vezes relatado por usuários deste fórum:

http://www.guj.com.br/posts/list/18712.java
http://www.guj.com.br/posts/list/51388.java#270556
http://www.guj.com.br/posts/list/47813.java#249931
http://www.guj.com.br/posts/list/64193.java#337494
http://www.guj.com.br/posts/list/14529.java#75657

Já vimos que o erro acontece quando um usuário tenta fazer uma requisição de login quando já existe aquele Session ID logado.
Para repoduzí-lo, por exemplo, basta abrir duas páginas de login em duas abas do mesmo browser, logar em uma, e em seguida tentar logar na segunda tela - com qualquer usuário e senha (isso não importa já que o erro acontece antes da validação que acontece dentro LoginModule).

Já que não há como consertar o erro (problemas estruturais do sr.tomcat), então o jeito é evitar que ele aconteça.

Vc pode pegar usando o session. Para fazer isso dentro do loginmodule vc previsa de uma ginastica. implemente um session listener que o informa quando as sessções são criadas e destruidas. Um objeto deve ouvir isso. o login module deve consultar esse objeto.


Eu já fiz isso! Mas dessa forma não funciona.

Eu só posso adicionar uma sessão uma vez que o login foi realmente feito com sucesso (dentro do LoginModule). E lá eu não tenho acesso ao objeto Request ou nada parecido que possa me informar o SessionID daquele Usuário.

O problema tlv seja saber qual id pertence a qual module de login. sem mais detalhes é complicado saber...


Exatamente, por isso que eu preciso ter controle das sessões efetivamente LOGADAS no sistema (que já fizeram o request de autenticação).
Saber apenas quais são as sessões criadas não ajuda muito.
Desta forma, eu preciso passar esse SessionID de alguma forma lá pra dentro do LoginModule.

Alguma idéia ?
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

Sokoban wrote:
Seguinte, aparentemente tanto eu quanto o usuário souzatg precisamos enviar um parâmetro a mais para o LoginModule.


Como eu disse não use o LoginModule padrão. Crie o seu.


O problema tlv seja saber qual id pertence a qual module de login. sem mais detalhes é complicado saber...


Exatamente, por isso que eu preciso ter controle das sessões efetivamente LOGADAS no sistema (que já fizeram o request de autenticação).
Saber apenas quais são as sessões criadas não ajuda muito.
Desta forma, eu preciso passar esse SessionID de alguma forma lá pra dentro do LoginModule.

Alguma idéia ?


não sei se ajuda

http://roneiv.wordpress.com/2008/02/18/jaas-authentication-mechanism-is-it-possible-to-force-j_security_check-to-go-to-a-specific-page/

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
Giovani MacDonald
Smalltalk

Membro desde: 11/07/2008 12:13:43
Mensagens: 3
Offline

Alguém resolveu esse problema?

Eu uso um LoginModule meu (ou seja, a ultima solução proposta nesse tópico não é suficiente pra mim) só que eu preciso pegar o IP do cliente, se eu tivesse um request seria fácill (com um request.getRemoteAddr()). O problema é que o LoginModule não recebe um request, também não consegui achar onde ele pega o valor do text field lá do form pelo request, afinal em algum lugar ele tem que fazer isso. Cheguei a dar uma olhada, pensei em criar um Callback só pra isso (um chute) e não cheguei a lugar nenhum.

Alguém tem alguma sugestão?
fre_d
Java Ninja

Membro desde: 13/06/2007 17:42:02
Mensagens: 259
Localização: Lages - SC
Offline


Já fiz isso. Eu uso o jboss e só funciona nas ultimas versões 4.x.x. No momento estou fora do meu computador assim que eu puder posto a solução.

Abraço,

Fred
fre_d
Java Ninja

Membro desde: 13/06/2007 17:42:02
Mensagens: 259
Localização: Lages - SC
Offline


import javax.security.jacc.PolicyContext;

try {
request = (HttpServletRequest)PolicyContext.getContext("javax.servlet.http.HttpServletRequest");
} catch (PolicyContextException e) {
throw new LoginException(e.getMessage());
}
Giovani MacDonald
Smalltalk

Membro desde: 11/07/2008 12:13:43
Mensagens: 3
Offline

Perfeito, valeu!
 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team