【问题标题】:WCF - Passing CurrentPrincipal in the HeaderWCF - 在标头中传递 CurrentPrincipal
【发布时间】:2012-06-15 13:24:18
【问题描述】:

我有一个 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 标头添加到操作上下文吗?这样的事情会节省大量的复制/粘贴,我不想这样做,但我不知道如何实现它:)

谢谢

【问题讨论】:

    标签: wcf header wcf-security


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-09
      • 2018-06-26
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      • 1970-01-01
      相关资源
      最近更新 更多