2014-09-05 76 views
0

我有一個網站要求用戶提供其他網站的登錄憑證。這個網站是我的服務器的外部。像craigslist.com。用戶向我提供用戶名和密碼後,我希望能夠驗證這些憑據對該站點有效,否則我想讓用戶知道他錯誤地輸入了外部站點的憑證。有沒有辦法讓我做到這一點?我寧願如果解決方案是在asp.net(vb.net/aspx),但我願意與其他語言合作。如果必須的話,我會找到一種方法讓他們溝通。驗證外部網站的登錄憑證

回答

0

絕對。一個快速警告:你應該使用一個好的安全模型來保護用戶提供給你的這些祕密,這是一個不同而又複雜的話題。您承擔了存儲其憑據的責任,儘管數據有希望通過應用程序在存儲中進行加密,但您的應用程序有能力將其解密爲純文本,從而使您的應用程序承擔責任。您可能還想確保您沒有違反遠程網站的任何TOS。

但是對於這個問題,你基本上想要的是打開web請求來模擬用戶手動登錄到其他站點的代碼。您將代表您的用戶從您的.NET代碼發佈該遠程服務器上的登錄表單。一種用於編寫代碼策略:

  • 使用工具,如Fiddler檢查由你的瀏覽器,當您使用已知良好的憑據手動張貼的登錄表單在遠程站點上的Web瀏覽器發出的網絡流量。
  • 找出哪些字段需要在有效請求中發佈,注意他們可能檢查的任何特殊要求(最好讓您的程序化請求看起來像真正的瀏覽器請求:
  • 通過所有相同的頭文件像用戶代理,接受,Referer,Cookies(額外的信用...也許他們正在尋找一個建立的會話cookie,你需要在進行POST之前使用初始設置請求進行設置)等。包括所有相同的字段POST,瀏覽器會......注意瀏覽器發佈的隱藏字段以及任何特定於請求的字段(這將需要您創建一個初始HTTP GET請求,讓服務器爲您提供一些有效的請求,然後發佈一篇文章 - 發送有效載荷的請求)有些表單通過設置顯示來防止機器人的阻止:沒有任何字段......所以當然不要將它們作爲手動用戶登錄不會(正如你將在Fiddler中看到的那樣)。
  • 然後看看什麼反應看起來像一個有效的登錄成功之後:
    • 查找「成功」頁面上,你可以用它來知道一個登錄成功的一些可靠的信息。例如,您可以搜索用作「成功標記」的特定字符串/ HTML片段。您也可以使用HTTP響應的其他特徵,例如響應代碼,發生的重定向等。這完全取決於遠程服務器在成功登錄後登錄與登錄失敗後的行爲。
  • 請記住,遠程網站可以隨時更改其HTML格式,這可能會破壞您的邏輯。因此,如果可以做出這樣的假設,那麼選擇一個最不可能突破的策略。
    • 計劃這種可能性的一件好事就是編寫一個「監視器」程序,該程序在計劃的基礎上運行,它將測試您用來確定成功登錄的邏輯。
    • 封裝在類庫中執行此操作的代碼,因此您的ASP.Net應用程序和您的監視器程序都可以共享它。
    • 讓監控程序提醒您(例如電子郵件),如果它失去了登錄或解釋遠程站點成功登錄的能力。這樣,您可以在用戶注意之前立即開始修復它。
    • 將監視器應用程序作爲Windows服務託管,或者如果不可行,則在Task Scheduler中運行的控制檯應用程序。
    • 對遠程網站要有禮貌,只有可能的話,每天只運行一次顯示器1-2次。根據您的項目要求,您可能需要充足的時間來處理問題。

您正在尋找在.NET框架中的類是HttpWebRequest。下面是一些可以讓你的代碼開始的例子:

+0

所以,如果我理解正確的話我必須通過一個模擬的一個請求通過自定義HTTP標頭將由瀏覽器從網頁發送。然後,我解析從遠程服務器發送的響應,表明它是成功的。我永遠不會想到這樣做。我對TOS的東西並不是100%肯定的,但當我到達那裏時我會穿過那座橋。爲了滿足我的需求,我必須爲您提供足夠寬泛的解決方案,以便我可以與其合作。喝彩。 – Vikk 2014-09-05 18:37:29

+0

是的,我會對此進行擴展,並說您正在設置多個HTTP標頭以及HTTP請求正文 - 您希望您的編程Web請求看起來完全像通過瀏覽器進行的手動Web請求。 HttpWebRequest類可以讓你通過設置各種屬性等來控制HTTP標頭和主體。使用Fiddler將您的程序化請求與手動請求進行比較,直到消除差異,並且您將順利完成任務。如果遠程網站的架構迫使您爲了兩個要求而引用原因,那麼也應該納入。 – 2014-09-05 19:23:37