2009-12-04 7 views
2

J'ai une exigence où la page de connexion ouvre la page principale dans une fenêtre contextuelle,authentification Open ID dans la même page

voilà comment je manipulaient dans l'authentification normale:

<http> 
... 
<form-login login-page="/Login.html" authentication-failure-url="/LoginHandler.jsp" always-use-default-target="false" default-target-url="/LoginHandler.jsp"/> 
... 
</http> 

page Connexion crée un appel ajax (en interne à l'aide du Générateur de requêtes de GWT) et lit la page html de réponse. Ainsi, si LoginHandler.jsp contient "succès", le login est un succès, ou si LoginHandler.jsp contient "échec", la connexion a échoué.

Dans les deux cas, Login.html est conscient de l'échec ou du succès de l'authentification et ouvre une fenêtre contenant l'écran principal en cas de succès.

Maintenant, je dois faire en sorte que mon système prenne en charge OpenID, si je comprends bien, l'authentification open id fonctionne de la manière suivante, si elle réussit, elle ouvrira l'url de succès (principalement LoginHandler.jsp dans mon cas), Cependant, s'il échoue ... Il ouvre l'écran de connexion du serveur cible (par exemple l'écran de connexion de Google), comment puis-je concevoir mon code pour travailler dans ce senario ??

ceci est ma config:

<openid-login authentication-failure-url="/LoginHandler.jsp" default-target-url="/LoginHandler.jsp" user-service-ref="openIdUserService"/> 

voici comment je suis connexion à l'aide RequestBuilder:

// Encode values for sending as a post request. 
String postData = "j_username=" + username 
     + "&j_password=" + password 
     + ((isRemembered) ? "&_spring_security_remember_me=on" : ""); 
String serverUrl = URL.encode("j_spring_security_check"); 

/* 
* Authenticate the user using a request builder to send the request to the server. 
* <p>on successful authentication, open main screen in a pop up 
* */ 
try 
{ 
    RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, URL.encode(serverUrl)); 
    requestBuilder.setHeader("Content-Type", "application/x-www-form-urlencoded"); 
    requestBuilder.sendRequest(postData, new RequestCallback() 
    { 
    public void onError(Request request, Throwable exception) 
    { 
     //Do nothing 
    } 

    public void onResponseReceived(Request request, Response response) 
    { 
     String responseText = response.getText(); 
     int indexStart = responseText.indexOf(startMessageIndicator) + startMessageIndicator.length(); 
     int indexEnd = responseText.indexOf(endMessageIndicator); 
     String text = responseText.substring(indexStart, indexEnd); 

     //Login was a success 
     if (text.contains(successMessageIndicator)) 
     { 
     //Woophie !! code for success comes here. 
     } 
     else if (text.contains(errorMessageIndicator)) 
     { 
     //Ooops ! get the error message encoded in the page 
     } 
    } 
    }); 
} 
catch (RequestException e) 
{ 
    //Do nothing 
} 

Est-il possible d'utiliser la même approche pour faire id ouvert une authentification basée?

+1

Je ne comprends pas parfaitement votre question. Mais dans le cas où cela vous inspire, considérez le flux contextuel de cette expérience de connexion OpenID: http://openidux.dotnetopenauth.net/ –

+0

comme mentionné, je suis capable de faire une connexion basée sur un ID ouvert, ce que je ne peux pas comprendre, c'est comment faites-le dans un style ajax –

+0

J'ai vérifié ce lien, j'aimerais beaucoup savoir comment vous avez réalisé l'ouverture de referer dans une nouvelle fenêtre, ayant dit cela, je pense que vous rafraîchissez votre page ... –

Répondre

2

OpenID ne fonctionne pas comme vous le décrivez. L'utilisateur entre son identifiant OpenID sur votre site et toujours sera redirigé vers le site du fournisseur d'accès OpenID (OP) pour vérification. Une fois vérifié, l'utilisateur sera redirigé vers votre site. Ils ne peuvent pas saisir à la fois leur identifiant OpenID et le mot de passe attendu par l'OP sur votre site, comme ils peuvent le faire avec l'authentification par nom d'utilisateur/mot de passe traditionnel. J'espère que cela pourra aider!

+0

J'ai implémenté avec succès un identifiant ouvert qui authentifie un utilisateur, je ne suis pas capable de comprendre comment le faire dans un style basé sur Ajax. –

+1

Écoutez Peter. Il DOIT y avoir une redirection du fournisseur vers votre site. – vidalsasoon

+0

il y a probablement une redirection, mais c'est entièrement géré par le printemps. Je ne suis pas sûr de la façon dont je me situe dans mon approche ici ... –

1

Je ne suis pas sûr si la réponse ci-dessus est exacte parce que je me connecte SO avec OpenID, et il ne me redirige jamais n'importe où. Je suppose que c'est parce qu'il conserve mon mot de passe OpenID dans un cookie, et ne me redirige que si cela ne fonctionne pas. Je ne sais pas vraiment comment tout cela fonctionne bien.

+0

hmm, je ne pense pas qu'il utilise un cookie ... Je peux m'authentifier avec succès en utilisant la méthode du générateur de requête, Cependant, lorsque l'utilisateur n'est pas connecté, la réponse est la page de connexion de google. Je n'ai pas encore craqué comment j'obtiens l'url de cet objet de réponse .... –

+0

Il est possible que n'importe quel fournisseur OpenID que vous utilisez définisse lui-même un cookie et ne vous demande pas de connexion si vous êtes déjà connecté avec eux . Si c'est vrai, cela semble plutôt dangereux! Il est également possible que SO conserve son propre cookie de session et ne délègue à OpenID que lorsque ce cookie expire. –

Questions connexes