2010-04-09 61 views
0

我是.NET新手,沒有太多的編程經驗。 在以下情況下處理.NET用戶身份驗證的標準方式是什麼?在.NET中處理用戶身份驗證?

  1. 在處理A中,用戶輸入ID /密碼

  2. 進程A發送ID /密碼在不安全的公共頻道方法B。

  3. 方法B與收到ID /密碼

驗證用戶是一些標準的加密算法中,我可以使用上述模型什麼?

用戶(購買我公司軟件的客戶)將在他們的計算機(連接到互聯網)中本地運行軟件(過程A)。 我需要驗證公司服務器上運行的進程B的用戶,以便只有註冊用戶才能運行該程序。

+0

@Daniel:沒有「C#.NET」這樣的東西。 – 2010-04-09 03:17:09

+0

@Daniel:上下文是什麼? ASP.NET? – 2010-04-09 03:18:04

+0

@Daniel:程序無法在沒有互聯網連接的情況下運行是否可以接受? – davidsleeps 2010-04-09 05:32:25

回答

0

您試圖實施的方法稱爲DRM,可能是爲了防止人們運行尚未註冊的軟件副本。

這是一場失敗的戰鬥。不管你如何實現它,最終的結果是,地方在你的代碼,你將有這樣的事情:

if (authenticationSucceeded) { 
    // Allow access to program 
} else { 
    // Show error and quit. 
} 

所有的人所要做的就是反編譯這個功能,在if語句插入!和重新編譯它再次(或直接修改中間語言代碼)。如果他們這樣做,那麼他們會破壞你的安全。

考慮到這一點,你不妨使用一個非常簡單,便宜的系統來實現。只需在服務器上有純文本註冊密鑰列表,並讓客戶端通過HTTPS發送密鑰(以防止竊聽)。添加更多的安全性可能是不值得的,因爲無論如何,如上所述,解決方案無論如何都是如此微不足道。


更新:海報在評論中說,該程序沒有訪問遠程數據庫是無用的。在這種情況下,可以是有意義的,以防止未經授權使用該軟件,或更確切地說 - 防止未經授權訪問您的數據庫。您可以使用WCF與服務器建立安全連接,並且在允許訪問接口的其餘部分之前需要發送用戶名和密碼哈希。如果用戶名/密碼不正確,服務器將不允許進一步調用您的服務。在服務器上,您可以將允許的用戶名和密碼哈希存儲在數據庫中。

+0

如何隱藏代碼,以便沒有人可以在客戶端反編譯它?我認爲如果你可以處理反編譯問題,通過https的WCF服務是通過非安全通道進行通信的好方法。 – 2010-04-09 05:51:10

+0

@Shoaib:我不打擾混淆客戶端代碼。但是對於WCF來說,這是一個好主意,尤其是當我剛剛注意到海報的評論,即客戶端在沒有訪問服務器的情況下是無用的。 – 2010-04-09 06:25:12

0

雖然安全性絕對不是我的強項,主要問題你必須關注這裏比的是,在步驟2中的數據通過公共渠道轉移的事實,因爲這樣的話,你將需要實施PGP密鑰傳遞場景或等效系統,以便進程B能夠解密來自進程A的內容,而無需攻擊者破壞導致可解密信息的私鑰。

更好的方法是改變這一點,以便第2步通過安全通道傳輸,這通常是通過SSL連接完成的。