Ferramenta Single Sign-On

Tenho varias aplicações web legadas em servidores distintos com logins distintos (uma por cpf, outra por matricula), também tem-se autentificação ldap, por certificação digital, por biometria e por OpenID o que precisa-se é que quando efetue o login em uma app o login nas outras seja também efetuado ou seja tenha um login unico, e possa também gerenciar uma sessão unica.

Alguém sabe uma boa API que atenda grande parte desses requisitos pois não tenho tempo hábil para implementar do zero.

Pesquisei e achei algumas como:
OpenAM
Java Open Single Sign-On
Apache Shiro

Porem não sei qual dessas possa atender a maior parte dos requisitos.
Alguém conhece alguma boa que tenha já implementado grande parte dos requisitos?

o josso é muito bom aqui na minha empresa usamos ele em varias aplicações e é bem tranquilo, se logo na aplicação de um cliente em ambiente de desenvolvimento e acesso outro ambiente do mesmo cliente ele ve que é a mesma sessão e não pede outro login.

sabe me dizer se ele funciona em bradcast ou tenho que ter uma app master para fazer os logins? preciso de algo em broadcast… Se tem varias apps e qualquer app que é feito o login é feita a autentificação nas demais…

na verdade você que mapeia isso, ele tem um xml onde você mapeia todas as aplicações no caso ele vira uma aplicação separada da sua podendo até ser rodado em outro servidor, e na configuração dele você aponta as aplicações por exemplo:

<agent:partner-app id="APLICACAO1" context="/aplicacao_login1" /> <agent:partner-app id="APLICACAO2" context="/aplicacao_login2" />

você aplica um id e o caminho da aplicação que você quer adicionar na mesma sessão no caso, assim ele sabe quais ele deve manter a sessão.

Sim mas sou obrigado a utilizar esta nova aplicação para rodar ou posso logar na APLICACAO1 e essa loga na 2 ou vice e versa?

é que na verdade o single sign-on é uma aplicação separada ele é uma aplicação web que você vai rodar separado das suas aplicações ele é apenas um login separado você vai integrar com suas aplicações não sei direito como configura isso mas que eu lembre tem uma tabela no teu banco onde tu diz pra onde ele deve mandar após cada login e na tua aplicação tem uma verificação da resposta do single sign-on

por exemplo, você vai ter o single sign-on rodando em http://localhost:9090/single/
e suas aplicações rodando em http://localhost:8080/aplicacao1/
http://localhost:8080/aplicacao2/

e nelas você vai ter uma sessão.

e sempre que acessarem a sua aplicação e não tiver feito login ele manda pro single sign-on por exemplo:

o usuario acessa pela primeira vez a aplicação http://localhost:8080/aplicacao1/ sem nunca ter logado, ele automaticamente redireciona pra aplicação de login no caso http://localhost:9090/single/ para o usuario logar após ele logar ele é mandado pra http://localhost:8080/aplicacao1/ normal e se ele acessar http://localhost:8080/aplicacao2/ e tiver logado no single sign-on e você configurar para permitir ele acessar a aplicacao1 e aplicacao2 ele ja vai estar logado e vai navegar normal na aplicacao1 e na aplicacao2

Meu problema e que os logins são diferentes na aplicação1 e na 2, na 1 é por cpf e na 2 e por email… como faz neste ponto?

o login é uma pagina em jsf normal você pode customizar, pode criar constantes pra cada aplicação e quando por exemplo a 1 é por cpf você renderiza o campo de cpf, quando for a 2 você renderiza um campo de email, é customizavel essa parte do login, você vai criar uma pagina de login usando facelets, no jboss seam você tem o componente fragment:

[code]<s:fragment rendered="#{bean.aplicacao1}">
<h:inputText name=“cpf” id=“cpf” value=“cpf”/>
</s:fragment>

<s:fragment rendered="#{bean.aplicacao2}">
<h:inputText name=“email” id=“email” value=“email”/>
</s:fragment>
[/code]
entendeu você customiza como quiser tem total controle sobre a pagina de login a unica diferença é que você vai rodar separado da sua aplicação.

tem algum lugar que tenha um exemplo para eu analisar seu funcionamento?

cara eu não tenho nenhuma aplicação com o josso são todas do meu trabalho e como são privada nao posso ti passar mas olha no site do josso deve ter algo sobre o funcionamento e a interação entre as aplicações.

Eu to fazendo SSO em uma aplicação pessoal minha

Fazer isso em 2 sites no mesmo domínio (mas por ex: subdomínios diferentes) é fácil porque um site pode ler o cookie do outro, ai basta eles usarem o mesmo cookie e compartilhar a tabela de users no banco de dados

No meu caso a complicação era que são 2 domínios diferentes, acabei fazendo com que um site faça uma requisição JSONP para o outro (que possui os formulários de login), pra pegar o valor do cookie

To procurando mais fontes pq esse site não explica muito bem… não tenho tempo de implementar agora… preciso ver apenas se atende os requisitos e se ele é melhor que a OpenAM e o Apache Shiro…

bem no meu caso JSON não da, pois no meu caso o cliente vai ter n servidores com n projetos distintos implementados em n linguagens com n formas de autentificação tem ate biometria no meio…