【问题标题】:How to disable forms authentication如何禁用表单身份验证
【发布时间】:2009-09-16 16:57:55
【问题描述】:

我的网站中有一个文件夹,我使用基于表单的身份验证对其进行保护。我现在必须在该文件夹中开发两个新页面,并且我想在测试和调试新表单时关闭安全性。我已将网站的 web.config 文件中的身份验证模式更改为 mode="None",并且已从安全文件夹中删除了 web.config 文件。我已经删除了浏览器中的所有 cookie,但是当我从这个文件夹加载页面时,我仍然被重新路由到登录页面。

如何在网站中临时禁用表单身份验证?

9/25/2009 - 我在根 web.config 文件中设置了 forms authentication = "None"。我已从实施表单身份验证的两个子文件夹中删除了 web.config 文件。我清除了缓存并删除了 cookie。仍然要求我登录以查看文件夹中的页面。我导航到一台以前从未出现过的机器上的页面,并被要求在那里登录。这被缓存在服务器上网站的某个地方,不会放手。

【问题讨论】:

    标签: asp.net authentication forms


    【解决方案1】:

    尝试将以下信息添加到您的 web.config。这将从所需的授权中删除路径中的项目。

    <location path="XXXXXXXXX">
        <system.web>
          <authorization>
            <allow users="*" />
          </authorization>
        </system.web>
      </location>
    

    【讨论】:

    • 我试过了,但没有任何乐趣。我再次尝试了没有路径属性,MSDN 说它将适用于当前目录和所有子目录,但仍然没有乐趣。我尝试添加用户=“?”也仍然没有快乐。
    【解决方案2】:

    您可以使用该安全目录的 web.config 中的位置标记来覆盖这些页面的安全性:

     <location path="secureddir/newform.aspx">
        <system.web>
          <authorization>
            <allow users="*"/>
          </authorization>
        </system.web>
      </location>
    

    http://msdn.microsoft.com/en-us/library/b6x6shw7.aspx

    【讨论】:

      【解决方案3】:

      您可能有一个正在调用 FormsAuthentication.RedirectToLoginPage() 的页面(或基类或母版页);

      【讨论】:

      • 我所有的身份验证重定向都是从 web.config 文件开始的。唯一的重定向来自 Logout.aspx 页面。任何课程或母版页都与安全性无关。
      【解决方案4】:

      我希望能够在调试时禁用整个应用程序的身份验证,因此我做了以下操作:

      1) 创建了这个类。

      namespace System.Web.Mvc
      {
          public class SwitchableAuthorizeAttribute : AuthorizeAttribute
          {
              public static bool Enabled = true;
      
              public override void OnAuthorization(AuthorizationContext filterContext)
              {
                  if (Enabled)
                  {
                      base.OnAuthorization(filterContext);
                  }
              }
          }
      }
      

      2) 在整个应用程序中将 [Authorize] 属性替换为 [SwitchableAuthorize]

      3) 需要时关闭授权。例如,我在 App_Start/AuthConfig.cs 中添加了以下内容:

      public static class AuthConfig
      {
          public static void RegisterAuth()
          {
              #if DEBUG
              SwitchableAuthorizeAttribute = false;
              #endif
      
              ...           
          }
      }
      

      您可能有除 DEBUG 之外的条件。这种方法将允许您以编程方式随时打开/关闭授权。

      如果您的页面需要登录用户信息,则可以通过执行一些虚假登录来增强此方法,而不是简单地跳过 base.OnAuthorization()。

      【讨论】:

        【解决方案5】:

        将验证码设置为无应该可以。一定有什么你遗漏的东西,你确定你正在浏览你更新的部署代码吗?

        【讨论】:

        • 我确定我遗漏了一些东西。这就是我发布问题的原因
        【解决方案6】:

        我以前遇到过这个问题 - 这可能与您无关,但我会提到它是一个内存中的 cookie,导致我的身份验证表单不断出现。我是通过尝试不同的浏览器发现的,即FF,Chrome,而不是IE。

        【讨论】:

        • 我默认使用 FireFox。我刚刚尝试使用开发服务器 IIS 而不是 localhost 在 IE 中打开其中一个页面。仍然没有快乐。
        • 也许在根文件夹和安全文件夹之间有一个中间配置文件?或者 web.config 文件指向另一个用于身份验证的配置文件: 或者 machine.config 身份验证部分以某种方式被使用?还是 global.asax 中正在进行一些自定义身份验证?
        • Global.asx 中唯一的东西是 404 错误的陷阱。 web.config 中没有 configSource。据我所知,没有人接触过 machine.config,因此它应该处于原始默认状态。只有三个 web.config 文件——一个在根目录中,一个在我放置所有登录和用户管理页面的 Secure 文件夹中,一个在包含需要安全访问的内容的文件夹中。您是说一个文件夹中的 web.config 文件会影响对等文件夹的行为吗?那会很讨厌。 - 帕梅拉
        • 您是否尝试停止并重新启动网络服务器?你用的是IIS7吗? iis 管理器中有一个表单身份验证设置。以 app_start 开头的调试会话没有显示任何内容?
        • @Steve 我的 IIS 管理技能有点薄弱。但是我在本地主机上的 VS 服务器上得到的结果与在开发站点的服务器上得到的结果相同。我们已经为该站点提供了 IUSER 匿名访问权限,并且访问从未经过表单身份验证的文件夹也没有问题。只是那些。如果我在 App_Start 中放置一个断点,我会寻找什么?
        【解决方案7】:

        尝试从身份验证节点中删除 mode="XXXX" 并评论 authorization 节点

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-26
          相关资源
          最近更新 更多