从WCF中的Message Inspector设置Identity / Principal

时间:2010-03-30 05:14:08

标签: .net wcf authentication

我正在开发一个WCF服务,该服务在SOAP标头中接收用户的凭据。使用MessageInspector在服务器端读取这些凭据。到目前为止一切都很好。

我想将Thread.CurrentPrincipal设置为自定义主体(CustomPrincipal),但是当我从MessageInspector执行此操作时,它会在调用服务时被覆盖。设置委托人的最佳时间是什么时候?另外,将检查员的主体,身份或凭证传递到该位置的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

IIRC,要执行此操作,您需要将主体权限模式设置为“自定义”并使用授权策略like so。据我所知,调用IAuthorizationPolicy.Evaluate是唯一一个期望你设置主体的地方,当我尝试使用而不使用使用IAuthorizationPolicy时,它放弃了我的主体(这是有道理的,因为无法保证WCF将在管道中的每个点使用相同的线程)。

答案 1 :(得分:0)

请注意,如果您在IIS中托管WCF服务,则可以为您的服务启用aspnetcompatibility行为。在这种情况下,您可以将HttpConext.Current.User设置为刚刚在消息检查器中进行身份验证的用户。

答案 2 :(得分:0)

Rory有一篇帖子描述了这个问题的解决方案。 http://www.neovolve.com/2008/04/07/wcf-security-getting-the-password-of-the-user/