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服务的唯一方法似乎是可笑的.
我不能添加额外的应用程序或虚拟目录 – 它必须是一个应用程序.