对托管的WCF服务的请求是由IIS处理管道进行身份验证还是。。。?
以下问题假设我们在中托管的是与Asp.Net并排的WCF服务: “当与Asp.Net并排托管WCF时-WCF托管 当 引发PostAuthenticateRequest事件,且不返回处理 到ASP.NET HTTP pipeline.Modules,这些模块被编码为拦截 管道后期的请求不会拦截WCF 请求。” “通过并行配置,WCF托管基础架构 截获WCF消息并将其路由出HTTP管道“ a) 假设WAS收到对WCF服务的请求,则在引发对托管的WCF服务的请求是由IIS处理管道进行身份验证还是。。。?,wcf,iis-7,was,Wcf,Iis 7,Was,以下问题假设我们在中托管的是与Asp.Net并排的WCF服务: “当与Asp.Net并排托管WCF时-WCF托管 当 引发PostAuthenticateRequest事件,且不返回处理 到ASP.NET HTTP pipeline.Modules,这些模块被编码为拦截 管道后期的请求不会拦截WCF 请求。” “通过并行配置,WCF托管基础架构 截获WCF消息并将其路由出HTTP管道“ a) 假设WAS收到对WCF服务的请求,则在引发PostAuthenticateRequest事件时是否会调用
PostAuthenticateRequest
事件时是否会调用WCF的身份验证机制(Windows、MembershipProvider或自定义身份验证),或者WCF仅在将请求路由出HTTP管道后才对请求进行身份验证?换句话说,WCF的身份验证机制是否在IIS的处理管道之外工作
b) 如果WCF的身份验证机制在IIS处理管道之外工作,那么我假设FormsAuthenticationModule不参与对WCF客户端的身份验证(假设服务使用forms身份验证)
c) 另外,如果WCF的身份验证机制在IIS处理管道之外工作,那么我假设必须将IIS/WAS配置为匿名身份验证,即使服务正在使用windows身份验证对客户端进行身份验证
d) 如果WCF服务由IIS7托管(除了服务必须只使用通过HTTP协议进行通信的端点这一事实之外),对我上述问题的答案会有什么不同吗
谢谢我建议实施一个技术性的spike项目 在核心部分,您始终可以实现codeaccessattribute来保护operationcontracts 您可以从应用PrincipalPermission(内置)开始,其中您在Thread.CurrentPrincipal(wcf服务的构造函数)上设置了IPrincipal
当托管在IIS中时,您可以设置HttpContext.Current.User,但在您的情况下,HttpContext将为null。要使用PrincipalPermission,您需要有自己的能力来创建/实现IPrincipal。我只能回答D部分和B部分,但这可能足以解决您试图解决的问题:如果您在ASP.Net应用程序中托管WCF服务,如果在WCF服务中启用ASP.Net兼容性,则支持表单身份验证。我们在Silverlight小程序中广泛使用此方法 这是一个分为两步的过程: 1) 使用
AspNetCompatibilityRequirements
属性装饰您的WCF服务实现类(下面是vb.net代码):
_
2) 将以下条目添加到web.config中的
部分:
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />