【发布时间】:2010-11-10 04:08:07
【问题描述】:
我有一个现有的 ASP.NET 应用程序,它在站点范围内实现表单身份验证。该应用程序部署在多个实例中(例如,customer1、customer2、test、dev 等),每个实例都有一个单独的数据库。 SSL 正在发挥作用。实例配置是通过 XML 配置文件。
我有一个允许上传/下载某些数据的新要求,我想将其实现为公共网络服务。
我最初的想法是选择性地为应用程序的子目录(例如 ~/Services)禁用表单身份验证,然后通过 SOAP 标头或类似内容进行身份验证。
但是,我没有找到选择性禁用表单身份验证的方法。
问题:有没有办法做到这一点?我已经尝试了 web config 中的
如果没有,您对如何设置有什么建议?我可以想到以下选项:
1) 在我的解决方案中创建一个新的“服务”项目,然后在每个实例的该目录上配置一个单独的 IIS ASP.NET 应用程序。 (优点:易于访问实例配置,将来可能需要。缺点:每个相关实例的配置负担)。
2) 创建一个单独的“服务”解决方案,该解决方案从应用程序解决方案中引用所需的程序集,并将其作为单独的 ASP.NET 应用程序托管。然后,根据 SOAP Header 中提供的 UserName 查找 db 连接字符串。 (优点:在 IIS 中配置单个应用程序。缺点:无法轻松访问实例配置。)
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>
【问题讨论】:
-
每次我在 web.config 中使用位置标签时,路径的形式都是“Services/MyService.asmx”而不是“~/Services/MyService.asmx”有你吗尝试在没有波浪线的情况下指定它?
-
就是这样。我可以发誓我已经尝试了 3 种不同的版本。这次我关闭了浏览器,您的解决方案完美运行。
标签: asp.net web-services web-applications forms-authentication