关闭一个子目录的ASP.Net WebForms身份验证

我有一个包含WebForms和MVC页面的大型企业应用程序.它具有我不想更改的现有身份验证和授权设置.

WebForms身份验证在web.config中配置:

<authentication mode="Forms">
  <forms blah... blah... blah />
 </authentication>

 <authorization>
  <deny users="?" />
 </authorization>

到目前为止相当标准我有一个REST服务,这是这个大型应用程序的一部分,我想使用HTTP身份验证代替这一个服务.

因此,当用户尝试从REST服务获取JSON数据时,它将返回HTTP 401状态和WWW验证标头.如果他们以正确形式的HTTP授权响应进行响应,则可以让它们进入.

问题是WebForms会在较低的级别覆盖这一点 – 如果您返回401(未授权),它会覆盖302(重定向登录页面).这在浏览器中没有问题,但对于REST服务来说却没有用.

我想关闭web.config中的身份验证设置,覆盖“rest”文件夹:

<location path="rest">
  <system.web>
   <authentication mode="None" />
   <authorization><allow users="?" /></authorization>
  </system.web>
 </location>

授权位工作正常,但验证行(< authentication mode =“None”/>)会导致异常:

It is an error to use a section registered as allowDeFinition=’MachinetoApplication’ beyond application level.

我在应用程序级别进行配置 – 它位于根web.config – 而且该错误是针对子目录中的web.configs.

如何覆盖身份验证,以便网站的其余所有网站使用WebForms身份验证,而这一个目录不使用?

这类似于另一个问题:401 response code for json requests with ASP.NET MVC,但是我并不是在寻找同样的解决方案 – 我不想仅仅删除WebForms身份验证,并在全球添加新的自定义代码,所涉及的风险和工作都很大.我想改变配置中的一个目录.

更新

我想设置一个单一的Web应用程序,并且我想要所有WebForms页面和MVC视图使用WebForms身份验证.我想要一个目录使用基本的HTTP身份验证.

请注意,我在谈论认证,而不是授权.我想要使​​用用户名& HTTP头中的密码,我想要WebForm& MVC页面附带来自.Net的身份验证cookie – 无论哪种情况,我们的DB都会进行授权.

我不想重写WebForms身份验证并滚动我自己的cookie – 这是向应用程序添加HTTP授权REST服务的唯一方法似乎是可笑的.

我不能添加额外的应用程序或虚拟目录 – 它必须是一个应用程序.

解决方法

如果“休息”仅仅是您根目录中的一个文件夹,那么几乎就在这里
删除认证线,即
<location path="rest">
  <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
  </system.web>
 </location>

或者,您可以添加一个web.config到您的休息文件夹,只需这样:

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

检查this.

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...