Procedura: creare un'associazione personalizzata utilizzando SecurityBindingElement
In Windows Communication Foundation (WCF) sono incluse numerose associazioni fornite dal sistema che possono essere configurate, ma che non forniscono totale flessibilità durante la configurazione di tutte le opzioni di sicurezza supportate da WCF. In questo argomento viene illustrato come creare direttamente un'associazione personalizzata di singoli elementi di associazione e vengono evidenziate alcune impostazioni di sicurezza che è possibile specificare durante la creazione di tale associazione. Per ulteriori informazioni su sulla creazione di associazioni personalizzate, vedere Estensione delle associazioni.
Creazione di un'associazione personalizzata
In WCF tutte le associazioni sono costituite da elementi di associazione. Ogni elemento di associazione deriva dalla classe BindingElement. Per le associazioni standard fornite dal sistema, vengono creati e configurati gli elementi di associazione, sebbene sia possibile personalizzare alcune delle impostazioni delle proprietà.
Al contrario, per creare un'associazione personalizzata, vengono creati e configurati gli elementi di associazione dai quali viene creato CustomBinding.
A tale scopo, vengono aggiunti singoli elementi di associazione a una raccolta rappresentata da un'istanza della classe BindingElementCollection, quindi la proprietà Elements di CustomBinding viene impostata allo stesso modo dell'oggetto. È necessario aggiungere gli elementi di associazione nell'ordine seguente: Transaction Flow, Reliable Session, Security, Composite Duplex, One-way, Stream Security, Message Encoding e Transport. Si noti che non tutti gli elementi di associazione elencati sono necessari in ogni associazione.
SecurityBindingElement
Tre elementi di associazione sono correlati alla protezione a livello di messaggio e sono tutti derivati dalla classe SecurityBindingElement. I tre elementi sono TransportSecurityBindingElement, SymmetricSecurityBindingElement e AsymmetricSecurityBindingElement. TransportSecurityBindingElement viene utilizzato per fornire una protezione in modalità mista. Gli altri due elementi sono utilizzati quando la protezione è fornita dal livello di messaggio.
Le classi aggiuntive vengono utilizzate quando viene fornita la protezione a livello di trasporto:
Elementi di associazione obbligatori
Esiste un ampio numero di possibili elementi di associazione che si possono combinare in un'associazione. Non tutte queste combinazioni sono valide. In questa sezione vengono descritti gli elementi obbligatori che devono essere presenti in un'associazione di sicurezza.
Le associazioni di sicurezza valide dipendono da molti fattori, tra cui:
Modalità di sicurezza.
Protocollo di trasporto.
Modello di scambio dei messaggi (MEP, Message Exchange Pattern) specificato nel contratto.
Nella tabella seguente vengono illustrate le configurazioni dello stack dell'elemento di associazione valide per ogni combinazione dei fattori precedenti. Si noti che si tratta di requisiti minimi. È possibile aggiungere ulteriori elementi all'associazione, ad esempio elementi di associazione di codifica dei messaggi, di transazione e di altro tipo.
Modalità di sicurezza | Trasporto | Modello di scambio dei messaggi del contratto | ||||
---|---|---|---|---|---|---|
|
|
Datagram |
Request Reply |
Duplex |
||
Trasporto |
Https |
|||||
|
|
OneWayBindingElement |
||||
HttpsTransportBindingElement |
HttpsTransportBindingElement |
|||||
|
TCP |
|||||
|
|
OneWayBindingElement |
||||
SSL o Windows StreamSecurityBindingElement |
SSL o Windows StreamSecurityBindingElement |
SSL o Windows StreamSecurityBindingElement |
||||
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
||||
Messaggio |
Http |
SymmetricSecurityBindingElement |
SymmetricSecurityBindingElement |
SymmetricSecurityBindingElement (modalità di autenticazione = SecureConversation) |
||
|
CompositeDuplexBindingElement |
|||||
|
|
OneWayBindingElement |
|
OneWayBindingElement |
||
HttpTransportBindingElement |
HttpTransportBindingElement |
HttpTransportBindingElement |
||||
|
Tcp |
SecurityBindingElement |
SecurityBindingElement |
SymmetricSecurityBindingElement (modalità di autenticazione = SecureConversation) |
||
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
||||
Misto (trasporto con credenziali messaggio) |
Https |
TransportSecurityBindingElement |
TransportSecurityBindingElement |
|
||
|
|
OneWayBindingElement |
|
|
||
|
HttpsTransportBindingElement |
HttpsTransportBindingElement |
|
|||
|
TCP |
TransportSecurityBindingElement |
SymmetricSecurityBindingElement (modalità di autenticazione = SecureConversation) |
SymmetricSecurityBindingElement (modalità di autenticazione = SecureConversation) |
||
|
|
OneWayBindingElement |
||||
SSL o Windows StreamSecurityBindingElement |
SSL o Windows StreamSecurityBindingElement |
SSL o Windows StreamSecurityBindingElement |
||||
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
Si noti che esistono molte impostazioni configurabili in SecurityBindingElements. Per ulteriori informazioni, vedere Modalità di autenticazione di SecurityBindingElement.
Per ulteriori informazioni, vedere Conversazioni e sessioni protette.
Procedure
Per creare un'associazione personalizzata che utilizza un SymmetricSecurityBindingElement
Creare un'istanza della classe BindingElementCollection con il nome
outputBec
.Chiamare il metodo statico M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true) che restituisce un'istanza della classe SymmetricSecurityBindingElement.
Aggiungere SymmetricSecurityBindingElement alla raccolta (
outputBec
) chiamando il metodo Add di Collection della classe BindingElement.Creare un'istanza della classe TextMessageEncodingBindingElement e aggiungerla alla raccolta (
outputBec
). In tal modo viene specificata la codifica utilizzata dall'associazione.Creare un HttpTransportBindingElement e aggiungerlo alla raccolta (
outputBec
). In tal modo viene specificato che l'associazione utilizza il trasporto HTTP.Creare una nuova associazione personalizzata creando un'istanza della classe CustomBinding e passando la raccolta
outputBec
al costruttore.L'associazione personalizzata risultante condivide molte delle stesse caratteristiche di WSHttpBinding standard. Specifica la protezione a livello di messaggio e le credenziali di Windows, ma disattiva le sessioni protette. Richiede che la credenziale del servizio venga specificata fuori banda e non crittografa le firme. È possibile controllare l'ultima solo impostando la proprietà MessageProtectionOrder come indicato nel passaggio 4. Le altre possono essere controllate utilizzando le impostazioni nell'associazione standard.
Esempio
Descrizione
Nell'esempio seguente è riportata una funzione completa per creare un'associazione personalizzata che utilizza un SymmetricSecurityBindingElement.
Codice
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
// 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);
Vedere anche
Riferimento
SecurityBindingElement
TransportSecurityBindingElement
SymmetricSecurityBindingElement
CustomBinding
Concetti
Associazioni fornite dal sistema