Forms身份验证应用程序中的ASP.NET Web服务

div*_*ius 5 asp.net web-services forms-authentication web-applications

我有一个现有的ASP.NET应用程序在站点范围内实现表单身份验证.应用程序部署在多个实例中(例如,customer1,customer2,test,dev等),每个实例都有一个单独的数据库.SSL正在发挥作用.实例配置是通过XML配置文件.

我有一个新的要求允许上传/下载某些数据,我想将其作为公共Web服务实现.

我最初的想法是选择性地禁用应用程序子目录的表单身份验证(例如,〜/ Services),然后通过SOAP标头或类似方法进行身份验证.

但是,我没有找到一种方法来有选择地禁用表单身份验证.

问题:有办法做到这一点吗?我在web配置中尝试了<location>标签无济于事.

如果没有,您对如何设置有什么建议?我可以想到以下选项:

1)在我的解决方案中创建一个新的"服务"项目,然后在每个实例中的该目录上配置一个单独的IIS ASP.NET应用程序.(Pro:轻松访问实例配置,将来可能需要.Con:每个相关实例的配置负担).

2)创建一个单独的"服务"解决方案,该解决方案引用应用程序解决方案中所需的程序集并将其作为单独的ASP.NET应用程 然后,根据SOAP Header中提供的UserName查找db连接字符串.(Pro:在IIS中配置的单个应用程序.Con:无法轻松访问实例配置.)

3)??

澄清:我确实在这里看到了答案:覆盖单个页面的ASP.NET表单身份验证,但使用位置标记没有帮助(Web服务的请求仍然被重定向).我的web.config中的相关部分如下所示:

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="Login.aspx"/>
  </authentication>
  <authorization>
    <deny users="?"/>
    <allow users="*"/>
  </authorization>
</system.web>

<location path="~/Services/MyService.asmx">
  <system.web>
    <authentication mode="None" />
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>
Run Code Online (Sandbox Code Playgroud)

Ste*_*ple 5

我认为位置标签会起作用,您可以在其中指定服务文件夹并允许所有用户,例如:

<location path="services">
      <system.web>
         <authorization>
            <allow users="*"/>
         </authorization>
      </system.web>
</location>
Run Code Online (Sandbox Code Playgroud)

但是您说这不起作用,您是否尝试过将 web.config 文件放在 services 文件夹中并禁用表单身份验证并允许该文件中的所有用户?