在我的工作场所,我们有几个经典的ASP和ASP.NET应用程序。
所有这些应用程序虽然做了不同的工作,但是通过单一登录模式集成,由一个主要应用程序处理。
主应用程序在经典ASP中,最初验证用户标识和密码,然后将UserID存储在会话变量中,然后由所有其他ASP和ASP.NET页面用作有效的Authenticated用户。 (对于DOT NET页面,我们使用会话桥接)
这是如何进行身份验证的经典ASP? (我不太了解经典的ASP)
从我介绍这个设置开始,我开始担心这个设置是否完美无缺?有没有更好的方法来处理相同的事情?
是否可以在同一登录页面中对经典asp和DOT NET进行身份验证?
答案 0 :(得分:3)
在我的经典ASP应用程序中,我总是粗略地完成您所描述的内容。当用户使用登录页面时,他们的凭据将被验证,然后用户ID和其他相关信息将存储到会话cookie中。
这种方法的潜在缺陷是理论上用户可以在本地更改其会话cookie,因此当他们向您的应用程序发出请求时,他们似乎是另一个存在安全风险的用户。我通常解决这个问题的方法是,当我将用户信息存储在会话cookie中时,我会根据这些信息和一些隐藏的salting信息生成一个身份验证代码(具体来说,我构建一个信息字符串并用SHA256哈希)。
然后,您可以定期重新检查身份验证代码,看它是否与该用户的预期代码匹配,如果更改cookie,验证代码将不再与预期代码匹配,并且用户将被启动。
在执行类似操作时可能遇到的主要问题是在ASP和ASP.Net中找到哈希算法的实现,它们为给定的输出字符串提供相同的哈希值 - 或确保您正确转换。
就我个人而言,我已经将Frez的免费SHA256实现用于经典ASP http://www.frez.co.uk/vb6.aspx,它将结果返回为64字符十六进制编码的小写字符串,而对于ASP.Net,我使用了System.Security.Cryptography.SHA256Managed { {3}}返回结果相同但大写(包含一些工作 - 参见下面的示例)。所以你需要的只是一个简单的大小写转换调用。
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
答案 1 :(得分:1)
如果您使用Windows域用户ID登录到您的PC,这可能是完全集成单点登录的最佳选择。 ASP和ASP.Net都支持Windows集成身份验证,无需将此信息存储在会话变量中。
答案 2 :(得分:0)
如果您无法使用Windows身份验证,请使用Cookie和会话变量。这样,如果用户向您发送cookie,您可以将用户登录。这就是asp.net处理登录的方式。
即使使用java或php,您的cookie也可以正常工作......
但最好的解决方案是摆脱经典的ASP。但我知道这不可能做到......