我有一个现有的ASP.NET应用程序,它在站点范围内实现表单身份验证。该应用程序部署在多个实例中(例如,customer1,customer2,test,dev等),每个实例都有一个单独的数据库。 SSL正在发挥作用。实例配置是通过XML配置文件。
我有一项新要求允许上传/下载某些数据,我希望将其作为公共网络服务实施。
我最初的想法是有选择地禁用应用程序子目录的表单身份验证(例如〜/ Services),然后通过SOAP标头或类似方法进行身份验证。
但是,我找不到有选择地禁用表单身份验证的方法。
问题:有办法做到这一点吗?我试过< location>在web配置中标记无效。
如果没有,您对如何设置提出了什么建议?我可以想到以下几个选项:
1)在我的解决方案中创建一个新的“服务”项目,然后在每个实例中的该目录上配置一个单独的IIS ASP.NET应用程序。 (Pro:轻松访问实例配置,将来可能需要.Con:每个相关实例的配置负担)。
2)创建一个单独的“服务”解决方案,该解决方案引用应用程序解决方案中所需的程序集并将其作为单独的ASP.NET应用程序托管然后,根据SOAP Header中提供的UserName查找db连接字符串。 (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>
答案 0 :(得分:4)
我认为位置标记可以使用,您可以在其中指定services文件夹并允许所有用户,例如:
<location path="services">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
但是您说没有用,您是否尝试将web.config文件放在services文件夹中并禁用表单身份验证并允许该文件中的所有用户?
答案 1 :(得分:0)
您还可以在services文件夹中拥有(覆盖)web.config文件,并将访问控制设置为匿名。
答案 2 :(得分:0)
对我有用的是允许用户所有用户访问我的webservices所在的文件夹。 首先,我在该文件夹中添加了一个配置文件,并在下面插入代码以允许所有用户。
<authorization>
<allow users="*"/>
</authorization>
</system.web>