WCF服务由WAS托管时,请求是否由IIS处理管道进行身份验证或...?

10

以下问题假定我们在 WAS 中与 Asp.Net 共同托管了一个 WCF 服务:

"当将 WCF 与 Asp.Net 同时托管时——当引发 PostAuthenticateRequest 事件时,WCF 托管基础结构会拦截 WCF 请求,并且不会返回处理到 ASP.NET HTTP 管道。在代码中编写了拦截管道后期阶段请求的模块不会拦截 WCF 请求。"

"采用并行配置,WCF 托管基础结构会拦截 WCF 消息并将其路由出 HTTP 管道"

a) 假设 WAS 收到一个针对 WCF 服务的请求,当引发 PostAuthenticateRequest 事件时,WCF 的身份验证机制(WindowsMembershipProviderCustom 身份验证)是否会被调用?还是说只有在 WCF 将请求路由出 HTTP 管道后才进行身份验证?换句话说,WCF 的身份验证机制是否在 IIS 处理管道之外工作?

b) 如果 WCF 的身份验证机制在 IIS 处理管道之外工作,那么我认为 FormsAuthenticationModule 不参与验证 WCF 客户端(假设服务使用表单验证),是这样吗?

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

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

谢谢

2个回答

1

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

这是一个两步过程:

1)使用AspNetCompatibilityRequirements属性(以下是vb.net代码)装饰您的WCF服务实现类:

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

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

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

1

我建议实施一个技术突破项目。

在核心部分,你总是可以实现codeaccessattribute来保护你的operationcontracts。

你可以从应用内置的PrincipalPermission开始,设置IPrincipal作为Thread.CurrentPrincipal的构造函数(WCF服务)。当在IIS中托管时,可以设置HttpContext.Current.User,但在你的情况下HttpContext将为空。要使用PrincipalPermission,你需要有自己创建/实现IPrincipal的能力。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接