2009-07-23 67 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的。但我知道这是不能做到的......