WCF - 在标头中传递CurrentPrincipal

时间:2010-04-22 09:17:22

标签: wcf header wcf-security

我有一个WCF服务,需要知道主叫用户的Principal。

在我所拥有的服务的构造函数中:

Principal = OperationContext.Current.IncomingMessageHeaders.GetHeader<MyPrincipal>("myPrincipal", "ns");

在调用代码中我有类似的东西:

        using (var factory = new ChannelFactory<IMyService>(localBinding, endpoint))
        {
            var proxy = factory.CreateChannel();
            using (var scope = new OperationContextScope((IContextChannel)proxy))
            {
                var customHeader = MessageHeader.CreateHeader("myPrincipal", "ns", Thread.CurrentPrincipal);
                OperationContext.Current.OutgoingMessageHeaders.Add(customHeader);

                newList = proxy.CreateList();
            }
        }

一切正常。

我的问题是,我怎样才能避免在using (var scope...{ [create header and add to OperationContext]中包含所有代理方法调用?

我可以创建一个自定义ChannelFactory来处理将myPrincipal标头添加到操作上下文中吗?这样的东西可以节省一大堆复制/粘贴,我宁愿不这样做,但我不知道如何实现它:)

由于

1 个答案:

答案 0 :(得分:3)

通过在配置中指定自定义策略,通过IAuthorizationPolicy设置WCF主体的正确时间。完整涵盖here。如果您尝试在其他点设置主体(可能是检查员),系统可以重置它。