【问题标题】:WCF & ASP.NET Membership ProviderWCF 和 ASP.NET 成员资格提供程序
【发布时间】:2011-03-19 03:10:25
【问题描述】:

我知道要让 WCF 与成员资格提供商合作,您必须明确配置它:(例如 http://www.codewrecks.com/blog/index.php/2009/09/08/use-aspnet-membership-provider-with-a-wcf-svc-service/)

但是如果您已经有 ASP.NET 站点在使用它,您不能通过执行以下操作来阻止对服务的匿名访问吗?

  <location path="PathToWCFService">
    <system.web>
      <authorization>
        <deny users"?" />
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

假设这可行,那么我猜 WCF 将无法访问会员信息?为什么这可能是一个坏主意的任何其他原因?谢谢!

编辑:是否有其他方法可以将 WCF 与不需要维护证书的成员资格提供程序一起使用?

【问题讨论】:

  • 不,你不能 - WCF 确实不以任何方式、形状或形式与 ASP.NET 绑定,并且默认情况下不使用 ASP.NET 处理管道。毕竟:您的 WCF 服务可以托管在 Windows 服务或控制台应用程序中 - 任何地方都没有 ASP.NET 的踪迹。所以不 - 你必须明确定义你的 WCF 安全 - 恐怕没有来自 ASP.NET 的“涓滴”......
  • @marc_s - 我在想 IIS 实际上可能是处理访问的那个,但它是 ASP.NET 是有道理的。毕竟,提供程序代码是在 .NET 中的。但是在那种情况下,为什么身份验证对静态文件有效?换句话说,如果我有一个没有 ASP.NET 页面的“Images”目录,我可以在 web.config 中控制访问。静态文件是否通过 ASP.NET 管道?
  • @marc_s - 你对我的回答有何看法?

标签: .net wcf asp.net-membership


【解决方案1】:

好的,我通常习惯于使用 marc_s,但在这种情况下,我认为他的 cmets 可能并不完全准确。

我认为他忽略的一点是,在 ASP.NET 中托管服务与自托管完全不同。

当您在 ASP.NET 网站中托管服务时,主机工厂由 ASP.NET 管理,并通过访问由 ASP.NET 提供服务的 .svc 端点来启动。

因此,虽然参与并有权访问服务的 ASP.NET 上下文是选择加入,但 ASP.NET 肯定会处理请求。

所以,是的,您可以使用 ASP.NET 授权保护任何 .svc 端点。

因此,您可以防止未经身份验证的访问。现在怎么办?如何对客户端进行身份验证以便它可以访问您的服务?

这是您提供的使用会员资格/身份验证服务的链接。

因此,在您的问题中,您描述的是使用成员资格提供程序堆栈保护 ASP.NET 托管的 wcf 服务的两个互惠方面,但可能将它们视为非此即彼。

现在,我可能弄错了,但这就是我对它的理解以及我过去是如何实现它的。

祝你好运。

是的,有一些方法可以保护具有成员资格的服务,这些方法不涉及证书,但它们通常有一点味道和/或需要 BasicHttp 或 WebHttp 绑定。

如果您愿意,我很高兴与您一起探索更多。

【讨论】:

  • So you have it guarded against unauthenticated access. What now? 我认为这取决于它的使用方式。 web.config 中的&lt;forms loginUrl="..." 重定向未经身份验证的页面请求。但是,如果用户在经过身份验证的页面上进行身份验证会发生什么情况,那么登录就会过期。从那个页面可能有一个 AJAX 调用,在这种情况下响应将是重定向页面?看起来我不是唯一一个遇到这个问题的人,这不是 WCF 独有的:stackoverflow.com/questions/199099/…
  • 在我的具体情况下,身份验证不会超时(是的,我知道其中的含义)。除非用户转到经过身份验证的页面然后清除他们的缓存/cookie,否则 AJAX 调用应该始终有效。未经身份验证的页面没有对服务的 AJAX 调用,如果有,我可以有两个服务。除非我错了,如果我只想确保它们经过身份验证,在我的具体情况下,它应该大部分都可以。如果我想检查角色,我仍然可以在 web.config 中执行此操作,但是除非我拆分服务,否则我不能为不同的方法要求不同的角色。我说的对吗?
  • 最后一件事...如果我在本地网页的上下文中使用该服务,如前所述,这可能有效。如果我需要对将由另一个网站、Windows 客户端应用程序等访问的服务进行身份验证,那么我必须将成员资格提供程序连接到 WCF 服务。
  • @nelson - 您的问题并不清楚您是否希望使用 AJAX 访问您的服务。这无疑简化了事情,因为 XHR 将使用浏览器的 cookie。处理身份验证超时当然是一个挑战,但无需永久会话即可管理,请参阅stackoverflow.com/questions/2234348/…
  • @nelson r.e. “最后一件事”:在这种情况下,您将利用旨在支持此类场景的 ApplicationServices。但同样,您的实现的实际要求将在很大程度上取决于哪条路线是合适的,并且如果没有更具体的要求,这些排列就很难详细说明。
猜你喜欢
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多