2010-06-05 112 views
1

我们有一系列的产品与 内置的Web服务器,各自有 一个登录页面,客户想要 建立一个门户网站中,他们登录 一次,从那里他们可以简单地 点击任何设备(外部 网站),它会自动登录到该网站,并将其重定向 登录屏幕后的页面。 该门户使用ASP.NET MVC, 外部设备是基于Windows CE的 运行嵌入式Web服务器的单元。 可以找到很多关于抓取,但不是 事件后重定向。 更多信息:道歉不被 不够详细,使用自定义身份验证的外部网站 ,这是一个 填写表格,然后在 装置内谈判取得 自定义密码引擎,使用脚本来检测是否 效果不错再从登录页面重定向 索引页面。 基本的用户名和密码进入 到形式,所有这些都被设置为在所有系统 相同,所以可能很难 编码,客户不希望在每台设备上的密码 而是由 设备软件强制。使用的Cookies不是 。基本上用户被提出 与一系列链接到所有的 设备(基本上是网站)当他们点击他们想要的链接 采取主要“索引”页,而不是 然后必须通过“登录“ 页面。使用ASP.NET自动登录到外部网站,并重定向

更新:有成功地使用HttpWebRequest和HttpWebResponse浏览目标网站,并登入,所以我现在有一个HttpWebResponse装载了正确的页面,剩下的问题是怎么做的我现在重定向或打开一个新的浏览器显示该HttpWebResponse并继续在登录的目标站点上导航。

+0

您提供的信息不足。这些外部网站使用什么样的身份验证机制?客户如何识别? Cookie是否被使用?客户如何从主门户导航到外部网站。是否会有链接或他们可以手动输入地址? – 2010-06-05 15:59:10

回答

1

如果您使用的是basic authentication,这是不可能的。正如您所看到的,您可以执行HttpWebRequest并传递凭据,但这是服务器端完成的,您无法继续导航。它的工作方式是浏览器需要设置基本身份验证使用的凭据标头,并且只能使用登录弹出窗口来完成。有些风格的IE可能支持以下URL:http://username:[email protected]提供凭据,但不确定是否会因为明显的原因与其他浏览器一起使用。

+0

我明白,服务器端在“登录”但没有办法将该控制/会话传递给浏览器。我将尝试一个JavaScript解决方案,因为用户的详细信息不是秘密,只是登录不方便。 感谢您的澄清。 – DoodleWalker 2010-06-06 09:02:44

0

我实现了使用WPF Web浏览器控件自动登录到网站下面。我发现,为了能够在没有授权标题的情况下浏览网站,我必须为每个新页面执行以下操作,否则用户会再次被提示。该解决方案也不需要用户:启用password @ site语法。

private bool _redirected = false; 
    private const string BaseUrl = @"http://mySite"; 

    private void Navigate() 
    { 
     var helpUrl = BaseUrl; 
     var authHeader = GetAuthHeader(); 

     _docWindow.Browser.Navigate(helpUrl, string.Empty, null, authHeader);   
     _docWindow.Browser.Navigating += Browser_Navigating; 

    } 

    private string GetAuthHeader() 
    { 
     byte[] authData = UnicodeEncoding.UTF8.GetBytes(_userName + ":" + _password); 
     string authHeader = "Authorization: Basic " + Convert.ToBase64String(authData); 
     return authHeader; 
    } 

    void Browser_Navigating(object sender, System.Windows.Navigation.NavigatingCancelEventArgs e) 
    {    
     if (_redirected) 
     { 
      _redirected = false; 
      return; 
     } 
     var newPage = BaseUrl + e.Uri.AbsolutePath; 

     e.Cancel = true; 
     _redirected = true; 
     _docWindow.Browser.Navigate(newPage, string.Empty, null, GetAuthHeader()); 
    }