WIF kullanarak akışlı bir WCF net.tcp hizmet uç noktasını güvence altına almak için bir gereksinimim var . Jeton sunucumuza karşı gelen çağrıların kimliğini doğrulamalıdır. Hizmet, büyük miktarlarda veri ve şeyleri aktarmak için tasarlandığından akışa sahiptir.
Bu imkansız görünüyor. Ve yakalamanın etrafında gidemezsem, Noel'im mahvolur ve neşeli alışverişçiler yavaş yavaş serinleyen vücuduma adım atarken kendimi bir olukta içeceğim. Çok ciddi çocuklar.
Bu neden imkansız? İşte Catch-22.
İstemcide, token sunucumuzdan aldığım GenericXmlSecurityToken ile bir kanal oluşturmam gerekiyor . Problem yok.
// people around here hate the Framework Design Guidelines.
var token = Authentication.Current._Token;
var service = base.ChannelFactory.CreateChannelWithIssuedToken(token);
return service.Derp();
"Sorun yok" mu dedim? Problemo. Aslında, NullReferenceException
stil problemo.
"Dostum," diye sordum Çerçeveye, "boş kontrol bile ediyor musun?" Çerçeve sessizdi, bu yüzden demonte ettim ve
((IChannel)(object)tChannel).
GetProperty<ChannelParameterCollection>().
Add(federatedClientCredentialsParameter);
istisnanın kaynağıydı ve GetProperty
çağrı geri dönüyordu null
. Peki, WTF? İleti güvenliğini açar ve istemci kimlik bilgilerini türüne ayarlarsam, IssuedToken
bu özelliğin artık ClientFactory
(protip: IChannel'de, "piç" SetProperty "eşdeğeri yok) olduğunu gösterir.
<binding name="OMGWTFLOL22" transferMode="Streamed" >
<security mode="Message">
<message clientCredentialType="IssuedToken"/>
</security>
</binding>
Tatlı. Artık NRE yok. Ancak, şimdi müvekkilim doğumda hatalı (hala onu seviyorum, tho). WCF teşhisi yoluyla kazmak (protip: en kötü düşmanlarınızı ezdikten ve sizden önce sürdükten sonra yapın, ancak kadınlarının ve çocuklarının ağıtlarının tadını çıkarmadan hemen önce), bunun sunucu ve istemci arasındaki güvenlik uyumsuzluğu nedeniyle olduğunu görüyorum.
İstenen yükseltme 'net.tcp: // localhost: 49627 / MyService' tarafından desteklenmiyor. Bunun nedeni eşleşmeyen bağlamalar olabilir (örneğin sunucuda değil istemcide etkinleştirilmiş güvenlik).
Ana bilgisayarın dialarını kontrol etmek (tekrar: ezmek, sürmek, günlükleri okumak, ağıtların tadını çıkarmak), bunun doğru olduğunu görüyorum
Protokol Türü application / ssl-tls, bu tür yükseltmeyi desteklemeyen bir hizmete gönderildi.
"Şey, ben," dedim, "Ben sadece ev sahibi Mesaj güvenliğini açacağım!" Ve biliyorum. Nasıl göründüğünü bilmek istiyorsanız, istemci yapılandırmasının tam bir kopyasıdır. Yukarı Bak.
Sonuç: Kaboom.
Bağlama ('NetTcpBinding', ' http://tempuri.org/ '), ileti düzeyi güvenliği ile birlikte yapılandırılamayan akışı destekler. Farklı bir aktarım modu seçmeyi veya aktarım seviyesi güvenliğini seçmeyi düşünün.
Bu nedenle, sunucum jetonlarla hem aktarılamaz hem de güvence altına alınamaz . 22'yi yakala.
tl; dr: WIF kullanarak akışlı bir net.tcp WCF uç noktasını nasıl güvence altına alabilirim?
TransportWithMessageCredential
mod başka bir seçenek olabilir.
<security mode="Transport" /> <transport clientCredentialType="IssuedToken" /> </security>