验证外部站点的登录凭据

时间:2014-09-05 16:38:58

标签: asp.net vb.net

我有一个网站要求用户提供其他网站的登录凭据。该站点位于我的服务器外部。像craigslist.com这样的东西。在用户向我提供其用户名和密码后,我希望能够验证这些凭据对该站点是否有效,否则我想让用户知道他错误地输入了外部站点的凭据。有没有办法让我这样做?如果解决方案是在asp.net(vb.net/aspx),我更愿意,但我愿意与其他语言合作。如果必要的话,我会找到让他们沟通的方法。

1 个答案:

答案 0 :(得分:0)

绝对。一个快速警告:您应该使用良好的安全模型来保护用户为您提供的这些秘密,这是一个不同且复杂的主题。您负责存储其凭据,虽然数据有望由您的应用程序在存储中加密,但您的应用程序可以将其解密为明文,这会对您的应用程序负责。您可能还想确保您没有破坏远程网站的任何服务条款。

但是对于这个问题,您基本上想要的是打开Web请求以模拟用户手动登录其他站点的代码。您将代表您的用户从.NET代码中发布该远程服务器上的登录表单。编写代码的策略:

  • 使用Fiddler之类的工具检查浏览器在使用已知良好凭据在Web浏览器中手动在远程站点上发布该登录表单时发送的网络流量。
  • 找出需要在有效请求中发布哪些字段,注意他们可能要检查的任何特殊要求(最好使您的程序化请求看起来与真正的浏览器请求完全相同:
  • 传递所有相同的标题,例如User Agent,Accept,Referer,Cookies(额外信用......也许他们正在寻找一个已建立的会话cookie,您需要在执行POST之前使用初始设置请求进行设置),等等。在POST中包含浏览器所有相同的字段...注意浏览器发布的隐藏字段,以及任何特定于请求的字段(这需要您进行初始HTTP GET请求以使服务器给出你有一些有效的,然后发送有效载荷的后请求)。有些表单通过在字段上设置display:none来预防机器人...所以当然不要发布那些作为手动用户登录的内容(正如你在Fiddler中看到的那样)。
  • 然后查看有效成功登录后的响应:
    • 在“成功”页面上找到一些可靠信息,您可以使用这些信息来了解登录成功。例如,您可以搜索充当“成功标记”的特定字符串/ HTML片段。您还可以使用HTTP响应的其他特性,例如响应代码,发生的重定向等等。这完全取决于远程服务器在成功登录与失败登录后的行为方式。
  • 请记住,远程网站可能随时更改其HTML格式,这可能会破坏您的逻辑。因此,如果有可能做出这样的假设,请选择最不可能破坏的策略。
    • 计划这种可能性的一件好事是编写一个“监视”程序,您可以按计划运行,该程序将测试您用于确定成功登录的逻辑。
    • 在类库中封装执行此操作的代码,因此您的ASP.Net应用程序和您的监视程序都可以共享它。
    • 如果监控程序失去了登录或解释远程站点上成功登录的能力,请让您(例如电子邮件)提醒您。通过这种方式,您可以在用户注意到之前立即开始修复它。
    • 将监视器应用程序作为Windows服务托管,如果不可能,则托管在任务计划程序中运行的控制台应用程序。
    • 礼貌地访问远程网站,如果可能的话,每天只运行一次监视器1-2次。根据您的项目要求,您可能有足够的时间对问题做出反应。

您在.NET框架中寻找的类是HttpWebRequest。以下是一些可以帮助您开始使用代码的示例:

相关问题