Nasıl yapılır: SecurityBindingElement Kullanarak Özel Bağlama Oluşturma
Windows Communication Foundation (WCF), yapılandırılabilir ancak WCF'nin desteklediği tüm güvenlik seçeneklerini yapılandırırken tam esneklik sağlamayan, sistem tarafından sağlanan çeşitli bağlamalar içerir. Bu konu, doğrudan tek tek bağlama öğelerinden özel bağlama oluşturmayı gösterir ve böyle bir bağlama oluşturulurken belirtilebilen bazı güvenlik ayarlarını vurgular. Özel bağlamalar oluşturma hakkında daha fazla bilgi için bkz . Bağlamaları Genişletme.
Uyarı
SecurityBindingElementolarak ayarlandığında BufferedTCP aktarım TransferMode tarafından kullanılan varsayılan kanal şekli olan kanal şeklini desteklemezIDuplexSessionChannel. Bu senaryoda kullanmak SecurityBindingElement için olarak ayarlamanız TransferModeStreamed gerekir.
Özel Bağlama Oluşturma
WCF'de tüm bağlamalar bağlama öğelerinden oluşur. Her bağlama öğesi sınıfından BindingElement türetilir. Standart sistem tarafından sağlanan bağlamalar için bağlama öğeleri sizin için oluşturulur ve yapılandırılır, ancak bazı özellik ayarlarını özelleştirebilirsiniz.
Buna karşılık, özel bağlama oluşturmak için bağlama öğeleri oluşturulur ve yapılandırılır ve bağlama öğelerinden bir CustomBinding oluşturulur.
Bunu yapmak için, tek tek bağlama öğelerini sınıfın bir örneği tarafından temsil edilen bir koleksiyona BindingElementCollection ekler ve ardından öğesinin CustomBinding
özelliğini bu nesneye eşit olarak ayarlarsınızElements
. Bağlama öğelerini şu sırada eklemeniz gerekir: İşlem Akışı, Güvenilir Oturum, Güvenlik, Bileşik Çift Yönlü, Tek yönlü, Akış Güvenliği, İleti Kodlama ve Aktarım. Listelenen tüm bağlama öğelerinin her bağlamada gerekli olmadığını unutmayın.
SecurityBindingElement
Üç bağlama öğesi, tümü sınıfından türetilen ileti düzeyi güvenliğiyle SecurityBindingElement ilgilidir. Üçü , SymmetricSecurityBindingElementve AsymmetricSecurityBindingElementşeklindedirTransportSecurityBindingElement. TransportSecurityBindingElement, Karma mod güvenliği sağlamak için kullanılır. İleti katmanı güvenlik sağladığında diğer iki öğe kullanılır.
Aktarım düzeyi güvenliği sağlandığında ek sınıflar kullanılır:
Gerekli Bağlama Öğeleri
Bağlamada birleştirilebilen çok sayıda olası bağlama öğesi vardır. Bu birleşimlerin tümü geçerli değildir. Bu bölümde, bir güvenlik bağlamasında mevcut olması gereken öğeler açıklanmaktadır.
Geçerli güvenlik bağlamaları, aşağıdakiler de dahil olmak üzere birçok faktöre bağlıdır:
Güvenlik modu.
Aktarım protokolü.
Sözleşmede belirtilen ileti değişimi düzeni (MEP).
Aşağıdaki tabloda, önceki faktörlerin her bileşimi için geçerli bağlama öğesi yığın yapılandırmaları gösterilmektedir. Bunların en düşük gereksinimler olduğunu unutmayın. Bağlamaya ileti kodlama bağlama öğeleri, işlem bağlama öğeleri ve diğer bağlama öğeleri gibi ek bağlama öğeleri ekleyebilirsiniz.
Güvenlik Modu | Taşıma | Sözleşme İletisi Değişim Düzeni | Sözleşme İletisi Değişim Düzeni | Sözleşme İletisi Değişim Düzeni |
---|---|---|---|---|
Datagram |
Request Reply |
Duplex |
||
Taşıma | Https | |||
OneWayBindingElement | ||||
HttpsTransportBindingElement | HttpsTransportBindingElement | |||
TCP | ||||
OneWayBindingElement | ||||
SSL veya Windows StreamSecurityBindingElement | SSL veya Windows StreamSecurityBindingElement | SSL veya Windows StreamSecurityBindingElement | ||
TcpTransportBindingElement | TcpTransportBindingElement | TcpTransportBindingElement | ||
İleti | Http | SymmetricSecurityBindingElement | SymmetricSecurityBindingElement | SymmetricSecurityBindingElement (kimlik doğrulama modu = SecureConversation) |
CompositeDuplexBindingElement | ||||
OneWayBindingElement | OneWayBindingElement | |||
HttpTransportBindingElement | HttpTransportBindingElement | HttpTransportBindingElement | ||
Tcp | SecurityBindingElement | SecurityBindingElement | SymmetricSecurityBindingElement (kimlik doğrulama modu = SecureConversation) | |
TcpTransportBindingElement | TcpTransportBindingElement | TcpTransportBindingElement | ||
Karma (ileti kimlik bilgileriyle taşıma) | Https | TransportSecurityBindingElement | TransportSecurityBindingElement | |
OneWayBindingElement | ||||
HttpsTransportBindingElement | HttpsTransportBindingElement | |||
TCP | TransportSecurityBindingElement | SymmetricSecurityBindingElement (kimlik doğrulama modu = SecureConversation) | SymmetricSecurityBindingElement (kimlik doğrulama modu = SecureConversation) | |
OneWayBindingElement | ||||
SSL veya Windows StreamSecurityBindingElement | SSL veya Windows StreamSecurityBindingElement | SSL veya Windows StreamSecurityBindingElement | ||
TcpTransportBindingElement | TcpTransportBindingElement | TcpTransportBindingElement |
SecurityBindingElements üzerinde birçok yapılandırılabilir ayar olduğunu unutmayın. Daha fazla bilgi için bkz . SecurityBindingElement Kimlik Doğrulama Modları.
Daha fazla bilgi için bkz . Güvenli Konuşmalar ve Güvenli Oturumlar.
Yordamlar
SymmetricSecurityBindingElement kullanan özel bir bağlama oluşturmak için
adlı
outputBec
sınıfın BindingElementCollection bir örneğini oluşturun.sınıfının bir örneğini döndüren statik yöntemini
M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)
çağırın SymmetricSecurityBindingElement .SymmetricSecurityBindingElement sınıfının yöntemini çağırarak
Add
() koleksiyonunaoutputBec
Collection<T>BindingElement ekleyin.Sınıfının bir örneğini TextMessageEncodingBindingElement oluşturun ve koleksiyona (
outputBec
ekleyin. Bu, bağlama tarafından kullanılan kodlamayı belirtir.HttpTransportBindingElement oluşturun ve koleksiyona (
outputBec
ekleyin. Bu, bağlamanın HTTP aktarımını kullandığını belirtir.Sınıfının bir örneğini CustomBinding oluşturup koleksiyonu
outputBec
oluşturucuya geçirerek yeni bir özel bağlama oluşturun.Sonuçta elde edilen özel bağlama, standart WSHttpBindingile aynı özelliklerin çoğunu paylaşır. İleti düzeyi güvenlik ve Windows kimlik bilgilerini belirtir, ancak güvenli oturumları devre dışı bırakır, hizmet kimlik bilgilerinin bant dışında belirtilmesi gerekir ve imzaları şifrelemez. Sonuncusu yalnızca 4. adımda gösterildiği gibi özelliği ayarlanarak MessageProtectionOrder denetlenebilir. Diğer ikisi standart bağlamadaki ayarlar kullanılarak denetlenebilir.
Örnek
Açıklama
Aşağıdaki örnek, kullanan bir özel bağlama oluşturmak için eksiksiz bir SymmetricSecurityBindingElementişlev sağlar.
Kod
// Create an empty CustomBinding to populate
CustomBinding binding = new CustomBinding();
// Create a SymmetricSecurityBindingElement.
SymmetricSecurityBindingElement ssbe =
SecurityBindingElement.CreateSspiNegotiationBindingElement(true);
// Add the SymmetricSecurityBindingElement to the BindingElementCollection.
binding.Elements.Add(ssbe);
binding.Elements.Add(new TextMessageEncodingBindingElement());
binding.Elements.Add(new HttpTransportBindingElement());
return new CustomBinding(binding);
Public Shared Function CreateCustomBinding() As Binding
' Create an empty Custom Binding to populate,
Dim binding As New CustomBinding()
' Create a SymmetricSecurityBindingElement.
Dim ssbe As SymmetricSecurityBindingElement
ssbe = SecurityBindingElement.CreateSspiNegotiationBindingElement(True)
' Add the SymmetricSecurityBindingElement to the BindingElementCollection.
binding.Elements.Add(ssbe)
binding.Elements.Add(New TextMessageEncodingBindingElement())
binding.Elements.Add(New HttpTransportBindingElement())
Return New CustomBinding(binding)
End Function