2010-06-05 110 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()); 
    }