2009-03-19 4 views
0

Nous utilisons .NET MVC, et nous essayons de dynamiquement (à travers le contrôleur) définissez l'URL de l'iFrame. Cela a bien fonctionné sur FireFox et Chrome, mais pas Ie. Sur Ie seul le premier cas permet à l'utilisateur de se connecter correctement. Les sites v10 et v9 ne le font pas. Tous les sites utilisent les paramètres querystring pour se connecter. Leur source ressemble à ceci (source infructueuse dans IE) - aucune différence visible.IE (6 & 7) iFrame Querystring paramètres définis dans .NET MVC Page ne fonctionne pas, semble tronqué, mais apparaît dans Tact sur la page Source

  • En outre, nous avons essayé ce paramètre de sécurité IE7 entier Activé pour naviguer vers l'image dans un autre domaine - ce n'était pas le problème; ça ne marche toujours pas. Ne fonctionne pas non plus sur IE6. Les mêmes résultats que dans les captures d'écran ci-dessous.

  • Également le codage Html n'a pas fonctionné (non montré, mais essayé).

Toutes les idées seraient tellement génial!

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head id="Head1"><title> 

</title> 
<style type="text/css"> 
     td { 
       font-family: Arial; 
       font-size: small; 
     } 
    </style> 
</head> 
<body> 
<form action="/Account/Navigate" method="post"> 
    <table style="align: right; width: 100%;"> 
     <tr> 
      <td align="right"> 
       <input type="submit" name="butSubmit" value="WN" />&nbsp; 

        <input type="submit" name="butSubmit" value="MyDg" /> 

        <input type="submit" name="butSubmit" value="V9" /> 

      </td> 
     </tr> 
    </table> 

     <iframe id="displayFrame" src="http://my.totallyinsecuretopostthis.com/Login.aspx?&uname=sdavis&pword=04ab" style="width: 100%; height: 95%;"></iframe> 
    </form> 
</body> 
</html> 

source de succès dans IE7:

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head id="Head1"><title> 

</title> 
<style type="text/css"> 
      td { 
        font-family: Arial; 
        font-size: small; 
      } 
    </style> 
</head> 
<body> 
<form action="/Account/Navigate" method="post"> 
    <table style="align: right; width: 100%;"> 
     <tr> 
      <td align="right"> 
       <input type="submit" name="butSubmit" value="WN" /> 

        <input type="submit" name="butSubmit" value="MyDg" /> 

        <input type="submit" name="butSubmit" value="V9" /> 

      </td> 
     </tr> 
    </table> 

     <iframe id="displayFrame" src="http://www.totallyinsecuretopostthis.com/users/428/login/700bc1c8d837f30fdbc03cfc03b58c02" style="width: 100%; height: 95%;"></iframe> 
    </form> 
</body> 
</html> 

extrait de code (première vue, puis contrôleur):

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<SingleSignOnUser>" %> 
<%@ Import Namespace="Wingnut.Data.Model"%> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head id="Head1" runat="server"> 
<title></title> 
<style type="text/css"> 
    td { 
     font-family: Arial; 
     font-size: small; 
    } 
</style> 
</head> 
<body> 
<% using (Html.BeginForm("Navigate", "Account", FormMethod.Post)) { %> 
    <% TempData["username"] = Model.WingnutUserEmail; %> 
    <% TempData["password"] = Model.PasswordHash; %> 
    <table style="align: right; width: 100%;"> 
     <tr> 
      <td align="right"> 
       <!-- always display this, but when click, make sure you are authenticated; else, prompt for correct 
       wingnut password --> 
       <input type="submit" name="butSubmit" value="WN" />&nbsp; 
       <% if (Model.IsV10User()) { %> 
        <input type="submit" name="butSubmit" value="MyDg" /> 
       <% } %> 
       <% if (Model.IsV9User()) { %> 
        <input type="submit" name="butSubmit" value="V9" /> 
       <% } %> 
      </td> 
     </tr> 
    </table> 
    <% string url = ViewData["iFrameURL"].ToString(); %> 
    <% if (ViewData["iFrameURL"].ToString() != "popup") { %> 
     <iframe id="displayFrame" src="<%=ViewData["iFrameURL"]%>" style="width: 100%; height: 95%;"></iframe> 
    <% } %> 

(maintenant le code Controller :)

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Navigate(string butSubmit) { 
    _service = new SSOUserService(); 
    SingleSignOnUser wnUser = _service.GetValidUser(TempData["username"].ToString(), TempData["password"].ToString()); 

    ViewData["iFrameURL"] = "http://www.usatoday.com"; 

    try { 
     //if you are supposed to bypass the intersect page... 
     if (wnUser != null) { 
      switch (butSubmit) { 
       case "WN": 
        if (wnUser.IsWingnutUser()) 
         ViewData["iFrameURL"] = string.Format("http://www.totallyinsecuretopostthis.com/users/{0}/login/{1}", wnUser.WingnutId, wnUser.WingnutToken); 
        else { 
         // do popup to capture this person's correct, but uncaptured, Wingnut password 
         // try to authenticate, if can, save, and proceed 
         // else, give error message/popup finally 
         ViewData["iFrameURL"] = "popup"; 
         ViewData["popupText"] = "Oops. During the Totallyinsecuretopostthis's recent Single Sign On effort, we require that you enter your Totallyinsecuretopostthis" + 
          "password for us here one time only for authentication to SomePlace:"; 
        } 
        break; 

       case "MyDg": 
        if (wnUser.IsV10User()) { 
         ViewData["iFrameURL"] = 
          string.Format(@"http://my.totallyinsecuretopostthisv10.com/Login.aspx?&uname={0}&pword={1}", 
              wnUser.V10UserCredentials.LoginName, 
              wnUser.V10UserCredentials.Password); 
        } 
        break; 

       case "V9": 
        if (wnUser.IsV9User()) { 
         ViewData["iFrameURL"] = 
          string.Format(
           @"https://login.totallyinsecuretopostthisv9.com/clients/OtherPages/ExternalSignIn.aspx?UserName={0}&Password={1}", 
           wnUser.V9UserCredentials.LoginName, wnUser.V9UserCredentials.Password); 
        } 
        break; 
      } 
     } 
    } 

    catch (Exception ex) { 
     ModelState.AddModelError("Errors", ex.Message); 
    } 

    return View("Navigation", wnUser); 
} 

+0

Salut, Mehrdad. J'ai essayé de l'encoder Les deux dans le code derrière/controller, ainsi que dans la vue que votre exemple démontre ci-dessous - pas de chance. Ça ne marche toujours pas. Bonne idée, cependant. Nous avons une théorie qui fonctionne qu'il faut coder en quelque sorte. –

Répondre

0

Utilisez HttpUtility.HtmlAttributeEncode pour coder l'esperluette dans l'URL:

ViewData["iFrameUrl"] = HttpUtility.HtmlAttributeEncode(string.Format(...)); 

je suggère de le faire tout en rendant la balise <a> dans la vue au lieu de coder en dur dans le contrôleur.

0

Ce n'est pas quelque chose à faire avec le "? &" au début de la chaîne de requête?

juste essayer: http://my.totallyinsecuretopostthis.com/Login.aspx?uname=sdavis&pword=04ab

+0

C'est ce que je pensais aussi - IE n'aime pas cette syntaxe, mais ce n'était pas le problème. Finalement, j'ai trouvé un hack/une résolution - je n'ai jamais réussi à faire fonctionner l'iFrame src = "mystring", mais j'ai créé un hack. B/c le site que nous essayons de naviguer, nous possédons; donc sur ce site nous avons créé un 'miroir' pg. –

1

Enfin, je trouve un hack/résolution - Je ne ai jamais eu l'iframe src = "mystring" au travail, mais j'ai créé un hack. B/c le site que nous essayons de naviguer, nous possédons; donc sur ce site nous avons créé une page "miroir". Les pages semblent identiques

1 - ma page originale avec le iFrame, mais pas j'ai un HREF, et lorsque vous cliquez pour aller où je voulais à l'origine ...

2 - vous frapper cette page de connexion, sont connectés ... mais j'ai ajouté des paramètres querystring à cette page de connexion (nous possédons également ce site), et si sso = true, et vous êtes authentifié, vous êtes redirigé vers ...

3 - une page sur le site B avec un iFrame qui semble identique à la page de l'étape 1.

C'est un hack, et beaucoup plus de travail, mais ça marche, et c'est le meilleur pour l'expérience de l'utilisateur que nous pourrions finalement créer.

*** Merci à vous qui avez fourni des réponses, ainsi qu'à tous ceux qui cherchent. J'apprécie tellement l'aide!

Questions connexes