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

问题描述:

我有一个现有的ASP.NET应用程序,它实现了整个窗体身份验证。该应用程序部署在多个实例中(例如,customer1,customer2,test,dev等),每个实例具有单独的数据库。 SSL正在发挥作用。实例配置通过XML配置文件。窗体身份验证应用程序中的ASP.NET Web服务

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

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

但是,我没有找到一种方法来选择性地禁用窗体身份验证。

问:有没有办法做到这一点?我试过<位置>在web配置标记无济于事。

如果不是的话,你有什么建议如何设置?我可以考虑以下选项:

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

2)创建一个单独的“服务”解决方案,从应用程序解决方案中引用需要的程序集,并将其作为独立的ASP.NET应用程序托管。然后,根据SOAP Header中提供的用户名查找数据库连接字符串。 (Pro:在IIS中配置单个应用程序Con:不能轻松访问实例配置)

3)??

说明:我在这里看到了答案:Override ASP.NET forms authentication for a single page,但是使用位置标记并没有帮助(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> 
+3

每当我在web.config中使用位置标记时,路径的形式是“Services/MyService.asmx”,而不是“〜/ Services/MyService.asmx”它没有波浪斜线? – 2009-07-12 23:37:51

+0

就是这样。我可以发誓我曾尝试过3种不同的版本。这一次,我关闭了浏览器,您的解决方案完美运行。 – dividius 2009-07-12 23:45:33

我觉得位置标签会的工作,在那里你指定服务文件夹,并允许所有用户,是这样的:

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

但你说没有工作,你有没有尝试在services文件夹中放置一个web.config文件,并禁用表单身份验证并允许该文件中的所有用户?

您还可以在访问控制设置为匿名的情况下在services文件夹中有一个(覆盖)web.config文件。

对我而言,我的工作就是允许用户在我的webservices所在的文件夹中访问所有用户。 首先,我在该文件夹中添加了一个配置文件,并在下面插入了代码以允许所有用户。

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