WCF服务-自定义主体
在WCF服务类的构造函数中,我将当前主体设置为消息头中传递的主体:WCF服务-自定义主体,wcf,principal,Wcf,Principal,在WCF服务类的构造函数中,我将当前主体设置为消息头中传递的主体: Thread.CurrentPrincipal = OperationContext.Current.IncomingMessageHeaders.GetHeader<BBPrincipal>("bbPrincipal", "ns"); Thread.CurrentPrincipal=OperationContext.Current.IncomingMessageHeaders.GetHeader(“bbPrinc
Thread.CurrentPrincipal = OperationContext.Current.IncomingMessageHeaders.GetHeader<BBPrincipal>("bbPrincipal", "ns");
Thread.CurrentPrincipal=OperationContext.Current.IncomingMessageHeaders.GetHeader(“bbPrincipal”、“ns”);
这似乎很好,但是当我在方法中引用主体时,Thread.CurrentPrincipal已恢复为WindowsPrincipal
该方法可能是在另一个线程上启动的。如何确保该方法使用服务构造函数中的主体集?WCF始终在AuthorizationPolicy中设置主体,因此它可能会覆盖您的更改。您应该在那里实现并设置原则。我刚刚找到了我最初问题的答案。要停止WCF使用空白主体重写主体,请在行为配置中设置以下内容:
<serviceAuthorization principalPermissionMode="None" />
就这么简单,不需要对现有的代码库进行彻底的更改
请参阅:您需要解释您试图实现的目标是什么。是否要在其他帐户/模拟下运行服务?当然,处理传入请求的线程将不同于服务创建的线程。您在哪里执行此代码:“将当前主体设置为消息头中传递的主体的线程”-我非常感兴趣,因为我有一个类似的问题。我也这么做了,谢谢!我尝试在验证用户凭据(在UserNamePasswordValidator中)时设置主体,并可以在我的服务中检索它。不管怎样,我想知道您是否遇到了一些不确定的问题,正如每个人(和ms文档)所说:“在自定义授权策略中设置您的主体”。Tnx再次提前。+1表示principalPermissionMode=“自定义”。另一个有用的例子是