如何使用ASP.NET Windows窗体身份验证来防止非本地访问

时间:2009-07-28 09:48:40

标签: forms-authentication

我有一个使用http调用本地webservices的应用程序。虽然ASP.NET保护整个应用程序形成授权,但我希望特定文件夹只能用于本地调用。

我该怎么做?

谢谢!

3 个答案:

答案 0 :(得分:2)

我认为表单身份验证中没有任何本机可以执行此操作。 你要么必须;

  1. 扩展表单身份验证以应对此问题(我认为它虽然密封在一起)。
  2. 让该文件夹中的所有项目都从一个检查调用者IP地址的基类继承。
  3. 使用IIS将该目录锁定到本地客户端(在IIS7中,这可以在.config中完成。我相信)。
  4. 添加一个HTTP处理程序来拦截对该目录的调用,如果不是本地目的,则重定向它们(这可能是最容易的)。
  5. 希望有所帮助,有点模糊,但却是一个起点。

答案 1 :(得分:1)

Ryan的所有建议都很好。这里还有两个(他的观点#2的变化)。

在Global.asax中,您可以使用Application_BeginRequest执行以下操作:

if (Request.UserHostAddress != "127.0.0.1" && !Request.UserHostAddress.StartsWith("172.16") && Request.Url.AbsolutePath.Contains("AdminFolderName"))
{
    Response.Redirect("~/somenonproectedpageornoaccessmessagepage.aspx", true);
}

或对该文件夹中的每个aspx页面使用MasterPage,并将以下内容放在Page_Load

if (Request.UserHostAddress != "127.0.0.1" && !Request.UserHostAddress.StartsWith("172.16"))
{
    Response.Redirect("http://www.kwiktrip.com", true);
}

答案 2 :(得分:0)

在您的web.config中,您可以执行以下操作:

  <location path="~/blog/add">
    <system.web>
      <authorization>
        <allow users="admin" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>