ASP.NET应用程序的ASP登录页面

时间:2009-07-23 15:41:34

标签: asp.net asp-classic

在我的工作场所,我们有几个经典的ASP和ASP.NET应用程序。

所有这些应用程序虽然做了不同的工作,但是通过单一登录模式集成,由一个主要应用程序处理。

主应用程序在经典ASP中,最初验证用户标识和密码,然后将UserID存储在会话变量中,然后由所有其他ASP和ASP.NET页面用作有效的Authenticated用户。 (对于DOT NET页面,我们使用会话桥接)

这是如何进行身份验证的经典ASP? (我不太了解经典的ASP)

从我介绍这个设置开始,我开始担心这个设置是否完美无缺?有没有更好的方法来处理相同的事情?

是否可以在同一登录页面中对经典asp和DOT NET进行身份验证?

3 个答案:

答案 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。但我知道这不可能做到......