Asp.net 验证外部站点的登录凭据

Asp.net 验证外部站点的登录凭据,asp.net,vb.net,Asp.net,Vb.net,我有一个网站,要求用户提供他在不同网站的登录凭据。此站点位于我的服务器外部。比如craigslist.com。在用户向我提供用户名和密码后,我希望能够验证这些凭据对该站点有效,否则我希望让用户知道他错误地输入了外部站点的凭据。我有办法做到这一点吗?我更愿意使用asp.net(vb.net/aspx)解决方案,但我愿意使用其他语言。如果有必要的话,我会想办法让他们交流。当然。一个快速警告:您应该使用一个好的安全模型来保护用户提供给您的这些机密,这是一个不同而复杂的主题。您承担了存储其凭据的责任,尽

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

当然。一个快速警告:您应该使用一个好的安全模型来保护用户提供给您的这些机密,这是一个不同而复杂的主题。您承担了存储其凭据的责任,尽管数据有望通过存储中的应用程序进行加密,但您的应用程序能够将其解密为明文,这将使您的应用程序承担责任。你可能还想确保你没有破坏远程网站的任何TOS

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

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


因此,如果我理解正确,我必须通过模拟浏览器从网页发送的请求来传递自定义http头。然后,我分析从远程服务器发送的响应,以确定是否成功。我从来没有想过这样做。我对TOS没有100%的把握但是当我到达那里的时候,我会跨越这座桥。我必须赞扬你提供了一个足够广泛的解决方案,我可以使用它来满足我的需要。好极了。是的,我想进一步说,你正在设置多个HTTP头,以及HTTP请求体,你希望你的编程web请求看起来完全像一个手动web请求st通过浏览器生成。HttpWebRequest类将允许您通过设置各种属性等来控制HTTP头和正文。使用Fiddler将您的编程请求与手动请求进行比较,直到消除差异,您将顺利完成。如果远程网站的体系结构迫使您执行两项操作,则提出理由的请求,然后也纳入其中。