SORU
19 Aralık 2013, PERŞEMBE


Catch-22 KARIM tarafından TCP XML hizmeti güvenilir akış; Noel, ruh sağlığımı bozma engeller

Bir şartı vargüvenli bir XML net akışı.tcp hizmeti KARIM kullanarak son nokta. Token sunucumuz karşı gelen aramaları, kimlik doğrulaması gerekir. Hizmet veri n şeyler büyük miktarda aktarmak için tasarlanmıştır çünkü akışa.

Bu imkansız görünüyor.Ve eğer yakalama fırsatım olabilir mi, benim Noel Baba olacak ve mutlu müşteriler yavaş yavaş soğutma bedenim üzerinde adım ise bir çukurda ölüme kendim içerim. Totes ciddi çocuklar.

Neden mümkün değil? İşte Catch-22.

İstemci token bizim server aldığım GenericXmlSecurityToken ile bir kanal oluşturmak istiyorum. Sorun değil.

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

"Diyorum? sorun değil mi Sorun değil. Aslında NullReferenceException tarzı problemo.

""Çerçeve" diye sordum, "sen bile onay null?" kardeşim Çerçeve sessiz kaldı, ve ben demonte bulundu

((IChannel)(object)tChannel).
    GetProperty<ChannelParameterCollection>().
    Add(federatedClientCredentialsParameter);

oldu özel kaynak ve GetProperty çağrı null dönüyordu. YAPARKEN? Meğer ben aç İleti güvenliği ve set İstemci Kimlik Bilgileri türü için IssuedToken Bu özellik artık var ClientFactory (protip: "SetProperty" eşdeğer İChannel, piç).

<binding name="OMGWTFLOL22" transferMode="Streamed" >
    <security mode="Message">
        <message clientCredentialType="IssuedToken"/>
    </security>
</binding>

Tatlı. Artık NREs. Ancak, şimdi benim müvekkilimdoğumda hatalı(hala onu, tho) seviyorum. Kazma ile XML tanılama (protip: yapmak senin en kötü düşmanları bunu sonra onları kırma ve onları sürüş önce ama önce zevk ağıtlar onların kadınları ve çocukları), görüyorum, çünkü bir güvenlik uyuşmazlığı arasında sunucu ve istemci.

İstenen yükseltme desteklenmiyor 'net.://localhost:49627/tcp Başlatılıyor'. Bu uyumsuz bağları (sunucu örnek, istemci güvenlik etkin değil) bağlı olabilir.

Ev sahibi diags (tekrar: ezmek, günlükleri, ağıtlar zevk) disk okunamıyor, bu benim için bir kontrol doğrudur

Protokol Türü uygulama/ssl-tls yükseltme bu tür desteklemeyen bir servis gönderildi.

""Sadece ana bilgisayarda İleti güvenlik açayım!" dedim "Evet, kendi kendine, Ve ben biliyorum.Eğer neye benzediğini bilmek istiyorsanız, istemci yapılandırma tam bir kopyası. Yukarı Bak.

Sonuç:Kaboom.

('', '') Olamaz akışı desteklerhttp://tempuri.org/ birlikte mesaj seviyede yapılandırılması güvenlik. NetTcpBinding bağlama Farklı bir nakil modu seçme veya aktarım düzeyi güvenliği seçmeyi düşünün.

Yanibenim ana akış ve simgeleri üzerinden güvenli hem de olamaz. Catch-22.

tl;dr: Nasıl güvenli yapabilirim.son nokta KARIM kullanıyor?? tcp XML?

CEVAP
5 Ocak 2014, Pazar


XML akış (sana bakıyorum, MTOM . birkaç alanlarda sorunlar var ^sup>1nedeniyle temel bir konuda nasıl başarısız gerçekleştirmek için ön kimlik doğrulaması bir şey olacağını düşünüyorum her zaman ise yarar (sadece etkiler sonraki isteklerde bu kanal, ilk istek) Tamam, bu değil tam olarak sorununuzu ama lütfen takip olarak alacağım senin sonunda. Normalde HTTP meydan bu gibi çalışır:

  1. istemci sunucu anonim olarak vurur
  2. sunucu, üzgünüm, 401, kimlik doğrulaması yapmam gerektiğini söyledi
  3. İstemci Kimlik Doğrulama belirteci ile server vurur
  4. sunucu kabul eder.

Eğer hiç MTOM sunucuda XML bir noktadaki akış etkinleştirmek için çalışırsanız, şikayet değil. Ancak, istemci proxy (gerektiği gibi, bağlantıları aynı olmalıdır) yapılandırırken ateşli bir ölüm patlayacak. Bunun nedeni bu XML önlemeye çalışıyor olaylar yukarıdaki sıra bu olmasıdır:

  1. istemci akarsu 100MB anonim olarak tek bir YAZI sunucuya dosya
  2. server üzgünüm, 401, kimlik doğrulaması yapmam gerektiğini söyledi
  3. istemci tekrar 100MB dosya kimlik doğrulama başlığı ile sunucuya akışları
  4. sunucu kabul eder.

Sadece 100MB göndermek için gerektiğinde sunucuya 200MB gönderdi dikkat edin. Peki, sorun bu. Cevap ilk denemede kimlik doğrulama göndermek, ancak bu özel bir davranış yazmadan XML olarak mümkün değildir. Neyse, konuyu dağıttım.

Senin Sorunun

İlk olarak, bana çalışıyorsun neyin imkansız olduğunu söylemek istiyorum2. Şimdi sırada dönen tekerlekleri durdurmak için, sana sebebini söyleyeyim:

Şimdi sorun, benzer bir sınıf dolaşıyoruz geldi. Eğer ileti düzeyi güvenlik etkinleştirirseniz, istemci aslında karma işlevi ve xml imza her zamanki ws-güvenlik için gerekli mesajı kapatmak için önce belleğe tüm veri akışı yüklemek gerekir. Eğer tek bir iletiyi imzalamak için tüm akışı gerçekten bir mesaj olduğu gibi, ama tek sürekli bir akış var) okuma varsa, o zaman sorun burada görebilirsiniz. XML "yerel" mesaj güvenliği hesaplamak için, tekrar sunucuya göndermek için akış. bir kez akışa sahip olacak Bu açıkça saçma bir şeydir, XML iletisi veri akışı için güvenlik düzeyi izin vermiyor.

Çok basit cevap burada da SABUN bir başlık olarak ilk web servisine parametre olarak, ya da belirteç göndermek ve özel bir davranış doğrulamak için kullanmanız gerekir. Olamaz WS-Güvenlik bunu yapmak için kullanın. Açıkçası, bu sadece XML bir sorun değildir - olamaz hemen her yığınlar için bu işin olmayacağını görüyor.

MTOM Problem çözme

Bu temel kimlik doğrulaması için MTOM akış sorunu çözdüm nasıl bir örnek sadece, belki de bu cesareti alıp sorunu için benzer bir şey uygulamak olabilir. Dönüm noktası olduğunu bulunmasını sağlamak amacıyla, özel mesaj Müfettiş, devre dışı bırakmak için tüm güvenlik kavramı üzerinde istemci proxy (kalır etkin sunucu) dışında aktarım düzeyi (SSL):

this._contentService.Endpoint.Behaviors.Add(
    new BasicAuthenticationBehavior(
        username: this.Settings.HttpUser,
        password: this.Settings.HttpPass));
var binding = (BasicHttpBinding)this._contentService.Endpoint.Binding;
binding.Security.Mode = BasicHttpSecurityMode.Transport; // SSL only            
binding.Security.Transport.ClientCredentialType = 
   HttpClientCredentialType.None; // Do not provide

Kendime bir mesaj Müfettiş ve özel davranışları kullanarak sağlamış olacak çünkü ulaşım güvenliği burada kapattım unutmayın

internal class BasicAuthenticationBehavior : IEndpointBehavior
{
    private readonly string _username;
    private readonly string _password;

    public BasicAuthenticationBehavior(string username, string password)
    {
        this._username = username;
        this._password = password;
    }
    public void AddBindingParameters(ServiceEndpoint endpoint, 
        BindingParameterCollection bindingParameters) { }
    public void ApplyClientBehavior(ServiceEndpoint endpoint,
        ClientRuntime clientRuntime)
    {
        var inspector = new BasicAuthenticationInspector(
            this._username, this._password);
        clientRuntime.MessageInspectors.Add(inspector);
    }
    public void ApplyDispatchBehavior(ServiceEndpoint endpoint,
        EndpointDispatcher endpointDispatcher) { }
    public void Validate(ServiceEndpoint endpoint) { }
}

internal class BasicAuthenticationInspector : IClientMessageInspector
{
    private readonly string _username;
    private readonly string _password;

    public BasicAuthenticationInspector(string username, string password)
    {
        this._username = username;
        this._password = password;
    }

    public void AfterReceiveReply(ref Message reply,
        object correlationState) { }

    public object BeforeSendRequest(ref Message request,
        IClientChannel channel)
    {
        // we add the headers manually rather than using credentials 
        // due to proxying issues, and with the 101-continue http verb 
        var authInfo = Convert.ToBase64String(
            Encoding.Default.GetBytes(this._username   ":"   this._password));

        var messageProperty = new HttpRequestMessageProperty();
        messageProperty.Headers.Add("Authorization", "Basic "   authInfo);
        request.Properties[HttpRequestMessageProperty.Name] = messageProperty;

        return null;
    }
}

Yani, bu örnek MTOM sorunu, ama aynı zamanda bir belirteç kimlik doğrulaması için benzer uygulamak için bir iskelet olarak KARIM-güvenli İlköğretim belirteci hizmeti tarafından oluşturulan acı olan herkes için.

Bu yardımcı olur umarım.

(1) Large Data and Streaming

(2) Message Security in WCF ("dezavantajları").

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Deany Boii

    Deany Boii

    27 Kasım 2007
  • EatingIn

    EatingIn

    12 EKİM 2013
  • Moodle

    Moodle

    11 Mayıs 2010