2009-07-23 39 views
0

在我的工作地點,我們有幾個經典的ASP和ASP.NET應用程序。ASP.NET應用程序的ASP登錄頁面

雖然做了不同的工作,但所有這些應用程序都通過單一登錄模式進行集成,該模式由一個主要應用程序處理。

主要應用程序是在傳統的ASP中,最初驗證用戶標識和密碼,然後將用戶標識存儲在會話變量中,然後由所有其他ASP和ASP.NET頁面用作有效的驗證用戶。 (對於DOT NET頁面,我們使用會話橋接)

這是如何進行身份驗證是傳統的ASP? (我不知道經典的ASP太多)

從我被介紹到這個設置的時候,我開始擔心這個設置是否完美無缺?有沒有更好的方法來處理相同的問題?

在同一個登錄頁面中是否可以對傳統asp和DOT NET進行身份驗證?

+0

投擲更多DOTs – JoshJordan 2009-07-23 16:12:41

回答

3

在我的經典ASP應用程序中,我總是大致描述你所描述的。當用戶使用登錄頁面時,他們的憑證會被認證,然後用戶ID和其他相關信息被存儲到會話cookie中。

這種方法的潛在缺陷是理論上用戶可以在本地修改他們的會話cookie,因此當他們向您的應用程序發出請求時,他們似乎是另一個用戶,這是一種安全風險。我通常會解決這個問題的方式是,當我在會話cookie中存儲用戶信息時,我會根據此信息和一些隱藏的salting信息(特別是我構建一串信息並使用SHA256對其進行哈希處理)生成認證碼。

然後,您可以定期重新檢查身份驗證代碼,以查看它是否與該用戶的預期代碼相匹配,如果Cookie以任何方式更改,身份驗證代碼將不再與期望的代碼匹配並且用戶被引導出去。

你在做類似的事情時可能會遇到的主要問題是在ASP和ASP.Net中找到哈希算法的實現,它們給出給定輸出字符串的哈希值 - 或者確保適當地進行轉換。

個人而言,我已經使用傳統的ASP http://www.frez.co.uk/vb6.aspx其返回結果爲64個字符的十六進制FREZ的免費SHA256實現編碼的小寫字符串,而ASP.Net我用System.Security.Cryptography.SHA256Managed http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256managed.aspx它返回結果相同但大寫(涉及一些工作 - 請參見下面的示例)。所以你需要的只是一個簡單的案例轉換調用。

Function SHA256(ByVal input As String) 
    Dim bytInput() As Byte 
    Dim bytHash() As Byte 
    Dim objBuilder As New StringBuilder 
    Dim objCrypto As New SHA256Managed 
    Dim intI As Integer 

    bytInput = Encoding.ASCII.GetBytes(input) 
    objCrypto = New SHA256Managed() 
    bytHash = objCrypto.ComputeHash(bytInput) 

    For intI = 0 To UBound(bytHash) 
     objBuilder.Append(Hex(bytHash(intI))) 
    Next 

    Return objBuilder.ToString() 
End Function 
+0

感謝羅布......這確實是一個非常好的結論..不幸的是我沒有足夠的信用來投票給你。 ,我仍然有這個問題沒有答案...... ,纔有可能在同一個登錄頁面經典的ASP和NET DOT認證?可以是ASP/DOT NET。 如果經典asp中的身份驗證只意味着創建一個會話變量,那麼不會像通過常規ASP.NET窗體身份驗證一樣從asp.net登錄頁面向經典asp添加會話變量。通過這種方式,我可以確保,我的DOT NET頁面至少是安全的。 - Raja – 2009-08-06 08:55:53

1

如果您使用Windows域用戶ID登錄到您的PC,這可能是完全集成的單一登錄的最佳選擇。 ASP和ASP.Net都支持Windows集成身份驗證,並且不需要將此信息存儲在會話變量中。

+0

感謝您的時間。我同意這一點。但我們不能使用Windows身份驗證模式。你建議有其他選擇嗎? – 2009-07-24 06:43:01

0

如果您不能使用Windows身份驗證,使用Cookie與會話變量一起。這樣,如果它向你發送一個cookie,你可以登錄你的用戶。這是asp.net如何處理登錄。

你的餅乾甚至可以使用Java或PHP的工作...

但是,最好的解決辦法是擺脫傳統的ASP的。但我知道這是不能做到的......