客户使用传统的ASP登录到基于web的后台办公室。
我已经编写了一个要包含在后台的新ASP.Net应用程序,我需要利用已经存在的登录系统,这样当他们登录到那里时,就不需要再次登录新的ASP.Net应用程序了。
登录名和密码以明文形式存储在SQL Server数据库中,我可以从我的ASP.Net应用程序访问该数据库。
集成这些系统的有效方法是什么?
我目前最好的想法是:在我的ASP.Net应用程序的链接中,我链接到一个“网关”登录页面,其中包含用户In和查询字符串中的散列密码+公共密钥。然后我将其与数据库中用户的密码进行比较...但问题是,如果这个查询字符串被截获,它可以被用来访问asp.net站点,而实际上不知道用户名和密码……
我很可能忽略了一些简单的东西。
发布于 2009-05-28 15:43:31
我认为你的想法是正确的。
正如你可能已经知道的,传统的asp和asp.net不能共享相同的会话状态,所以你确实需要一个机制来从一个登录到另一个。
我要做的是:当有人登录时,为该用户创建一个唯一的GUID,并将其保存在数据库中。当您从一个站点跳转到另一个站点时,将该GUID传递到查询字符串中。当您尝试将它们自动登录到其他站点时,请查找该GUID,看看是否有人附加了该GUID。如果是,请将其登录。
这样,您就不会传递任何用户可以猜测或解密的内容。
发布于 2009-05-28 15:41:54
经典的ASP系统如何维护登录状态?“小猪倒退”到目前为止,这是你最好的选择。
我工作过的所有经典ASP系统都使用cookie来跟踪身份验证信息,所以只需阅读这些cookie并与您可以访问的数据库进行比较。
由于信息存储在传统的ASP会话中,您是否可以添加一个“重定向页面”到传统的ASP端,即新模块的“入口”,并使其将有用的数据写出为cookie,或者触发到您的起始页的POST?通过使用cookie或POST请求,您最大限度地减少了对url被“劫持”的担忧,从而使他人无需用户名/密码即可进入ASP.net站点。
发布于 2009-06-04 12:38:05
您有理由担心MITM类型的攻击,可能是通过DNS缓存中毒或类似攻击。根据您的情况,通过向跨应用程序边界传递的登录令牌添加时间约束,可能足以缓解此问题的潜在影响。
“数据库中的GUID方法”是我自己在过去成功使用的一种方法,既用于在共享同一身份验证数据库的两个应用程序之间传递用户,也用于“密码重置电子邮件”类型的场景。您可以通过在记录上添加一个列来指定添加GUID的日期,并修改您的应用程序代码,使其仅登录小于x分钟/小时/天的GUID身份验证。
另一种方法是通过连接以下内容来避免数据库中的其他字段:
UserId + [Value representing current time to nearest x minute / hour /day] + Salt。。对其进行散列,然后在另一个应用程序上复制您的算法,并比较生成的两个值。
总的来说,我认为你提出的解决方案对这个问题是合适的。这当然不是太复杂。
https://stackoverflow.com/questions/921550
复制相似问题