2010-08-12 25 views

Répondre

5

Lorsqu'un utilisateur anonyme accède à une vue sécurisée, asp.net les redirige automatiquement vers la page SignIn et place le ReturnUrl dans la chaîne de requête. Vous pouvez conserver ReturnUrl en l'ajoutant au token_url utilisé dans la connexion RPX.

Voici l'aide que j'ai créé pour générer le bon href pour le RPX iframe sur ma page SignIn:

public static string RpxSignInUrl(this HtmlHelper htmlHelper) 
{ 
    string returnUrl = FormsAuthentication.GetRedirectUrl(
     String.Empty, // userName (not used, but cannot be null) 
     false); // persistent cookie (also ignored) 

    string tokenUrl = "http://<your-domain>/Account/RpxResponse?ReturnUrl=" + 
     HttpUtility.UrlEncode(returnUrl); 

    string realm = "<your-app-id>.rpxnow.com"; 
    string signInUrl = String.Format(
     CultureInfo.InvariantCulture, 
     "http://{0}/openid/embed?token_url={1}", 
     realm, 
     HttpUtility.UrlEncode(tokenUrl)); 

    return signInUrl; 
} 

Après que l'utilisateur authentifie, RPX appellera cette URL qui inclut maintenant le ReturnUrl d'origine. Vous pouvez utiliser FormsAuthentication.GetRedirectUrl à nouveau pour récupérer l'URL de retour.

Notez qu'il est important d'utiliser cette API plutôt que d'obtenir simplement la valeur de la collection Request.Querystring car elle valide l'URL de retour, en vérifiant qu'elle provient du même domaine. Si l'URL est jugée dangereuse, asp.net retournera à la propriété defaultUrl spécifiée dans l'élément forms de votre fichier web.config.

+0

Parfait. Le "http: // /Account/RpxResponse? ReturnUrl =" est la solution. –

+0

Quand remplacez-vous l'URL? –