我当前的任务是保护 WCF 服务。该服务使用配置框架(5.5,随 StockTraider 示例发布)托管,调用者也使用配置框架。
我设法使用 ws2007FederationHttpBinding 保护连接。
对于“IsOnline()”-检查我的 STS 发出服务令牌,这已经有效,但对于实际的服务调用,我希望 ActAs-Tokens 仍然知道被调用服务中的真实用户。
我的 STS 能够发行正确的 ActAs-Tokens。
问题是负载平衡客户端,它总是打开工厂,我不能再调用 WIF 方法(ConfigureChannelFactory() 和 CreateChannelActingAs()),因为它们要求工厂处于创建状态。
我最好的尝试是这样,但它在某处丢失了 ActAs-Subject 并且感觉就像一个黑客:
IPSServiceClient = new Client(serviceName, settingsInstance, createNewChannelInstance: true);
var token = ((IClaimsIdentity)Thread.CurrentPrincipal.Identity).BootstrapToken;
var factoryObject = IPSServiceClient.createANewChannelFactoryByAddress(IPSServiceClient.getANodeAddress());
var factory = factoryObject as ChannelFactory<IIWBPortalServiceV1>;
factory.ConfigureChannelFactory(); //factory must not be state=open here
factory.Credentials.SupportInteractive = false; //no cardspace
_channel = factory.CreateChannelActingAs(token);
我错过了配置框架中的扩展点吗?我应该走的最佳方式是什么?
如果我创建一个新的控制台应用程序,添加服务引用并添加两个调用(ConfigureChannelFactory() 和 CreateChannelActingAs()),它就可以工作了!