【问题标题】:ASP.NET Web Service inside Forms Authentication Application表单身份验证应用程序中的 ASP.NET Web 服务
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 如上所述,我犯的错误是为路径指定“~\Services”,而不仅仅是“Services”
  • 很高兴它在工作,遗憾的是 asp.net 在你可以使用 ~/ 的地方不一致,这让我在几个场合感到困惑
【解决方案2】:

您还可以在服务文件夹中有一个(覆盖)web.config 文件,并将访问控制设置为匿名。

【讨论】:

    【解决方案3】:

    对我有用的是允许用户所有用户访问我的网络服务所在的文件夹。 首先,我在该文件夹中添加了一个配置文件并插入下面的代码以允许所有用户。

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

    【讨论】:

      猜你喜欢
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      相关资源
      最近更新 更多