我在 VS2010 上使用 WCF 服务。
在我的客户端,Thread.CurrentPrincipal 填充了实现 IPrincipal 的自定义主体对象。
但是当 WCF 服务方法被调用时,服务端的 Thread.CurrentPrinicpal 是默认的 WindowsPrincipal。
如何使服务端 Thread.CurrentPrincipal 与客户端(自定义主体对象)相同?
请帮忙。
谢谢
我在 VS2010 上使用 WCF 服务。
在我的客户端,Thread.CurrentPrincipal 填充了实现 IPrincipal 的自定义主体对象。
但是当 WCF 服务方法被调用时,服务端的 Thread.CurrentPrinicpal 是默认的 WindowsPrincipal。
如何使服务端 Thread.CurrentPrincipal 与客户端(自定义主体对象)相同?
请帮忙。
谢谢
这是一种方法,但我不知道是否有更简单的方法:
您需要一个 IEndpointBehaviour 实现,该实现在 ApplyClientBehavior 方法中附加一个自定义消息检查器,该检查器又添加一个包含您的自定义主体实例的自定义消息头(在 BeforeSendRequest 方法中)。您可能需要使用 Data Contract 属性装饰您的自定义主体对象,以使其序列化。然后,实现一个自定义授权策略(类似于http://burcakcakiroglu.com/?p=2189),它将在服务器端运行并在 Evaluate 方法中再次读取自定义消息标头并复制标头中的主体进入evaluationContext.Properties [“Principal”]。