나는 WIF을 사용하여 스트리밍 된 WCF net.tcp 서비스 끝점을 보안해야한다는 요구 사항이 있습니다. 우리의 토큰 서버에 대해 들어오는 호출을 인증해야합니다. 이 서비스는 많은 양의 데이터를 전송하도록 설계되었으므로 스트리밍됩니다.Catch-22는 WIF로 보안 설정할 수있는 스트리밍 된 TCP WCF 서비스를 방지합니다. 내 크리스마스, 정신 건강 망치
이것은 불가능한 것처럼 보입니다. 그리고 내가 잡을 수 없다면 크리스마스가 망가질 것이고, 메리 쇼퍼가 천천히 몸을 차게하는 동안 나 자신을 마시고 죽을 것이다. 토트 중독, 너희들.
왜 이것이 불가능합니까? 여기에 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();
"문제 없음"이라고 했습니까? 문제. 사실, NullReferenceException
스타일 문제.
"형,"프레임 워크에 "너는 null 검사까지 해?"라고 물었습니다. 프레임 워크는 침묵했다, 그래서 나는 분해
((IChannel)(object)tChannel).
GetProperty<ChannelParameterCollection>().
Add(federatedClientCredentialsParameter);
예외의 원인이라고하고
GetProperty
호출
null
을 반환하는 것을 발견했다. 그래서, WTF? 메일 보안을 사용 설정하고 클라이언트 자격증 명 유형을
IssuedToken
으로 설정하면이 속성은 이제
ClientFactory
에 존재합니다. (protip : IChannel에 해당하는 "SetProperty"가 없습니다.
<binding name="OMGWTFLOL22" transferMode="Streamed" >
<security mode="Message">
<message clientCredentialType="IssuedToken"/>
</security>
</binding>
스위트. 더 이상 NRE가 아닙니다. 그러나, 지금 나의 클라이언트는 출생시 오류 (여전히 그를, tho 사랑)입니다. WCF 진단을 통해 파문을 일으킨다. (protip : 최악의 적을 해치 우고 여자와 아이들의 애도를 즐기기 전에 우연히 만난다.) 서버와 클라이언트 사이의 보안 불일치 때문이다.
'net.tcp : // localhost : 49627/MyService'에서 요청한 업그레이드가 지원되지 않습니다. 이는 일치하지 않는 바인딩 (예 : 클라이언트가 아닌 서버에서 사용할 수있는 보안) 때문일 수 있습니다. 나는 볼이하지 않는 서비스로 전송 된
프로토콜 유형 응용 프로그램/SSL-TLS 사실이다 :
호스트의 DIAGS을 (짝사랑, 예레미야 애가를 즐길 로그를 읽을 드라이브, 다시) 확인 해당 유형의 업그레이드를 지원하십시오.
"글쎄, 자기,"나는 "호스트에서 메시지 보안을 켜기 만 할 것입니다!"라고 말합니다. 그리고 나는 그렇다. 모양을 알기 원하면 클라이언트 구성의 정확한 사본입니다. 찾다.
결과 : Kaboom.
는 ('NetTcpBinding', 'http://tempuri.org/')를 결합하여 메시지 레벨 보안을 함께 구성 할 수없는 스트리밍을 지원.다른 전송 모드를 선택하거나 전송 레벨 보안을 선택하십시오.
그래서, 내 호스트는 모두 스트리밍 및 토큰를 통해 확보 할 수 없습니다. Catch-22.
tl; dr : WIF를 사용하여 스트리밍 된 net.tcp WCF 끝점을 보호하려면 어떻게해야합니까 ???
좋아, 아마 무지 질문을 여기지만 WIF 정말 메시지 모드를 필요로 하는가? 전송 모드는 스트리밍과 같이 잘 작동하지 않는 것처럼 들리는데, 분명히 테스트되지 않은 ' –
['TransportWithMessageCredential'] (http : // msdn.microsoft.com/en-us/library/ms731884(v=vs.110).aspx) 모드가 다른 옵션 일 수 있습니다. –
@JoachimIsaksson : 메시지 보안을 전혀 사용할 수 없습니다. – Will