Obtendo IP Cliente dentro de um LoginModule JAAS

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!

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 ? :roll:

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

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…

[quote=sergiotaborda]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 ? [/quote]

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

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: :cry:

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.

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

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.

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 ?

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

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/

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?

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

import javax.security.jacc.PolicyContext;

try {
request = (HttpServletRequest)PolicyContext.getContext(“javax.servlet.http.HttpServletRequest”);
} catch (PolicyContextException e) {
throw new LoginException(e.getMessage());
}

Perfeito, valeu!