Мы используем .NET MVC и пытаемся динамически (через контроллер) установить URL-адрес iFrame. Это работало нормально на FireFox и Chrome, но не Ie. Т.е. только в первом случае сайт позволяет пользователю правильно войти в систему. Сайты v10 и v9 этого не делают. Все сайты используют для входа параметры строки запроса. Их источник выглядит следующим образом (неудачный источник в IE) - без видимой разницы.
Кроме того, мы опробовали весь параметр безопасности IE7 Enabled для навигации по фрейму в другом домене - это не было проблемой; это все еще не работает. Также не работает на IE6. Те же результаты, что и на скриншотах ниже.
Также не работает Html-кодирование (не показано, но попыталось).
Любые идеи были бы такими классными!
<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://my.totallyinsecuretopostthis.com/Login.aspx?&uname=sdavis&pword=04ab" style="width: 100%; height: 95%;"></iframe>
</form>
</body>
</html>
успешный источник в 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>
Фрагмент кода (сначала View, затем Controller):
<%@ 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" />
<% 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>
<% } %>
(теперь код контроллера:)
[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);
}