10

以下问题假设我们在 WAS 中与 Asp.Net 并排托管 WCF 服务:

“当与 Asp.Net 并排托管 WCF 时 - WCF 托管基础结构会在引发 PostAuthenticateRequest 事件时拦截 WCF 请求,并且不会将处理返回给 ASP.NET HTTP 管道。编码为在后期阶段拦截请求的模块管道不拦截 WCF 请求。”

“通过并行配置,WCF 托管基础结构拦截 WCF 消息并将它们路由到 HTTP 管道之外”

a) 假设 WAS 收到对 WCF 服务的请求,WCF 的身份验证机制(WindowsMembershipProvider自定义身份验证)是否会在引发事件时被调用PostAuthenticateRequest,或者 WCF 是否仅在将请求路由出 HTTP 管道后才对请求进行身份验证?换句话说,WCF 的身份验证机制是否在 IIS 的处理管道之外工作?

b)如果 WCF 的身份验证机制在 IIS 处理管道之外工作,那么我假设FormsAuthenticationModule不涉及对 WCF 客户端进行身份验证(假设服务正在使用表单身份验证)?

c) 另外,如果 WCF 的身份验证机制在 IIS 处理管道之外工作,那么我假设 IIS/WAS 必须配置为匿名身份验证,即使服务是使用 Windows 身份验证的客户端身份验证?

d) 如果 WCF 服务由 IIS7 托管(除了服务必须仅使用通过 HTTP 协议进行通信的端点这一事实之外),我上述问题的答案是否会有所不同?

谢谢

4

2 回答 2

1

我只能回答 D 部分和 B 部分,但这可能足以解决您要解决的问题:如果您在 ASP.Net 应用程序中托管 WCF 服务,那么如果您启用 ASP.Net,则支持表单身份验证WCF 服务中的兼容性。我们在 Silverlight 小程序中广泛使用此方法。

这是一个两步过程:

1)用属性装饰你的WCF服务实现类AspNetCompatibilityRequirements(下面的vb.net代码):

<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)> _

2) 将以下条目添加到<system.servicemodel>web.config 中的部分:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
于 2011-11-12T01:55:28.983 回答
1

我建议实施一个技术尖峰项目。

在核心,您始终可以实现代码访问属性来保护您的操作合同。

您可以首先应用 PrincipalPermission(内置),在 IIS 中托管时在 Thread.CurrentPrincipal(wcf 服务的构造函数)上设置 IPrincipal,您可以设置 HttpContext.Current.User 但在您的情况下 HttpContext 将为空。要使用 PrincipalPermission,您需要具备创建/实施 IPrincipal 的能力。

于 2011-11-07T20:10:16.057 回答