2009-10-26 13 views
1

J'ai une application Seam qui doit utiliser une connexion externe pour se connecter. La logique est la suivante:Seam: connexion à l'aide de l'application SSO externe

  • Mon application envoie l'utilisateur à externe URL SSO
  • utilisateur fait ce qu'il faut pour authentifier il
  • En cas de succès, l'application externe réoriente utilisateur à mon application avec un jeton aléatoire
  • Mon code devrait contacter l'application externe via HTTP avec le passé jeton et obtenir des informations complètes de l'utilisateur en retour

assez simple. Mais je suis coincé.

La redirection arrive à/seam/resources/token. J'avais l'intention d'obtenir l'identité de la session, de la remplir avec un jeton et de m'authentifier. Mais dans le gestionnaire de ressources, la session utilisateur n'est apparemment pas visible: le contexte de la session est null. :(

J'ai essayé de le faire LifeCycle.beginCall là, et il fonctionne dans un sens. Logique d'authentification fonctionne, mais le résultat ne se libère à l'utilisateur (session de l'utilisateur a encore l'identité vide)

Qu'est-ce que je fait de mal?

PS est ici un code plus ou moins complète de mon gestionnaire de ressources. Exploitation forestière et d'autres choses sans rapport avec enlevé par souci de concision.

@Scope(ScopeType.APPLICATION) 
@Name("tokenResource") 
// @BypassInterceptors 
public class TokenResource extends AbstractResource { 
    @Override 
    public String getResourcePath() { 
     return "/token"; 
    } 

    @Override 
    public void getResource(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { 
     String token = request.getParameter("token"); 

     // woot? 
     Lifecycle.beginCall(); 

     Identity identity = Identity.instance(); 
     MyIdentity mid = (MyIdentity) identity; 
     mid.setToken(token); 
     mid.login(); 

     response.sendRedirect("/home.seam"); 
    } 
+0

Pouvez-vous dire quel est le fournisseur/bibliothèque SSO? – cetnar

+0

RPX: https://rpxnow.com/ Oui, c'est OpenID, mais il supporte aussi des API non-exactement-OpenID, comme Google ou Live. –

Répondre

0

Vous pouvez utiliser JBoss Picketlink pour intégrer OpenID et Google. Il y a un couple de e xamples dans le paquet qu'ils offrent et semble être simple à utiliser avec Seam.

La seule petite chose à remarquer et à prendre soin est que le projet est à un stade précoce, donc quelques bugs peuvent pop.

0

Peut-être outject l'identité de retour au contexte de la session?