相关疑难解决方法(0)

Catch-22防止WIF保证流式TCP WCF服务; 毁了我的圣诞节,心理健康

我需要使用WIF保护流式WCF net.tcp服务端点.它应该对我们的令牌服务器验证传入呼叫.该服务是流式传输的,因为它旨在传输大量数据.

这似乎是不可能的. 如果我无法绕过捕获物,我的圣诞节将被毁掉,我会在阴沟里喝水,而快乐的购物者则会越过我缓慢冷却的身体.手提箱严重,你们.

为什么这不可能?这是Catch-22.

在客户端上,我需要使用我从令牌服务器获取的GenericXmlSecurityToken创建一个通道.没问题.

// people around here hate the Framework Design Guidelines.
var token = Authentication.Current._Token;
var service = base.ChannelFactory.CreateChannelWithIssuedToken(token);
return service.Derp();
Run Code Online (Sandbox Code Playgroud)

我说"没问题"吗?Problemo.事实上,NullReferenceException风格问题.

"兄弟,"我问框架,"你甚至无效检查吗?" 框架是沉默的,所以我拆开并发现了

((IChannel)(object)tChannel).
    GetProperty<ChannelParameterCollection>().
    Add(federatedClientCredentialsParameter);
Run Code Online (Sandbox Code Playgroud)

是异常的来源,并且GetProperty呼叫正在返回null.那么,WTF?事实证明,如果我打开Message安全性并将客户端凭据类型设置为,IssuedToken那么此属性现在存在于ClientFactory(protip:IChannel中没有"SetProperty"等效,即混蛋).

<binding name="OMGWTFLOL22" transferMode="Streamed" >
    <security mode="Message">
        <message clientCredentialType="IssuedToken"/>
    </security>
</binding>
Run Code Online (Sandbox Code Playgroud)

甜.没有更多的NRE.然而,现在我的客户在出生时出现了故障(仍然爱他,所以).通过WCF诊断进行挖掘(protip:让你的最坏的敌人在击碎它们并在你面前驾驶它们之前做到这一点,但在享受他们的女人和孩子的悲伤之前),我看到它是因为服务器和客户端之间的安全性不匹配.

'net.tcp:// localhost:49627/MyService'不支持请求的升级.这可能是由于绑定不匹配(例如在客户端而不是在服务器上启用安全性).

检查主机的诊断(再次:压碎,驱动,读取日志,享受哀叹),我看到这是真的

协议类型application/ssl-tls已发送到不支持该类型升级的服务.

"好吧,自我,"我说,"我只是打开主机上的Message安全性!" 我做到了. 如果你想知道它的样子,它就是客户端配置的精确副本.抬头.

结果: Kaboom.

绑定('NetTcpBinding',' http://tempuri.org/ ')支持不能与消息级安全性一起配置的流.考虑选择不同的传输模式或选择传输级别安全性.

因此,我的主机不能通过令牌进行流式传输和保护.第二十二条军规.

tl; dr:如何使用WIF保护流式net.tcp WCF端点???

c# wcf nettcpbinding wif .net-4.5

181
推荐指数
1
解决办法
5269
查看次数

标签 统计

.net-4.5 ×1

c# ×1

nettcpbinding ×1

wcf ×1

wif ×1