Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Windows Communication Foundation (WCF) include diverse associazioni fornite dal sistema che possono essere configurate, ma non offrono la massima flessibilità durante la configurazione di tutte le opzioni di sicurezza supportate da WCF. In questo argomento viene illustrato come creare un'associazione personalizzata direttamente da singoli elementi di associazione ed evidenzia alcune delle impostazioni di sicurezza che è possibile specificare durante la creazione di tale associazione. Per altre informazioni sulla creazione di associazioni personalizzate, vedere Estensione delle associazioni.
Avviso
SecurityBindingElement non supporta la IDuplexSessionChannel forma del canale, ovvero la forma del canale predefinita utilizzata dal trasporto TCP quando TransferMode è impostata su Buffered. È necessario impostare TransferMode su Streamed per usare SecurityBindingElement in questo scenario.
Creazione di un vincolo personalizzato
In WCF tutte le associazioni sono costituite da elementi di associazione. Ogni elemento di associazione deriva dalla BindingElement classe . Per le associazioni standard fornite dal sistema, gli elementi di associazione vengono creati e configurati automaticamente, anche se è possibile personalizzare alcune delle impostazioni delle proprietà.
Al contrario, per creare un binding personalizzato, vengono creati e configurati gli elementi di binding e viene creato un oggetto CustomBinding dagli elementi di binding.
A tale scopo, aggiungere i singoli elementi di associazione a una raccolta rappresentata da un'istanza della BindingElementCollection classe e quindi impostare la Elements proprietà dell'oggetto CustomBinding uguale a tale oggetto. È necessario aggiungere gli elementi di associazione nell'ordine seguente: Flusso delle transazioni, 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 sicurezza a livello di messaggio, tutti derivati dalla SecurityBindingElement classe . I tre sono TransportSecurityBindingElement, SymmetricSecurityBindingElemente AsymmetricSecurityBindingElement. TransportSecurityBindingElement viene utilizzato per fornire la sicurezza in modalità mista. Gli altri due elementi vengono usati quando il livello di messaggio fornisce sicurezza.
Le classi aggiuntive vengono usate quando viene fornita la sicurezza a livello di trasporto:
Elementi di associazione obbligatori
Esistono un numero elevato di possibili elementi di associazione che possono essere combinati in un'associazione. Non tutte queste combinazioni sono valide. In questa sezione vengono descritti gli elementi necessari che devono essere presenti in un'associazione di sicurezza.
Le associazioni di sicurezza valide dipendono da molti fattori, tra cui i seguenti:
Modalità di sicurezza.
Protocollo di trasporto.
Modello di scambio dei messaggi (MEP) specificato nel contratto.
La tabella seguente illustra le configurazioni valide dello stack di elementi di associazione per ogni combinazione dei fattori precedenti. Si noti che si tratta di requisiti minimi. È possibile aggiungere elementi di associazione aggiuntivi all'associazione, ad esempio elementi di associazione di codifica dei messaggi, elementi di associazione delle transazioni e altri elementi di associazione.
| Modalità di sicurezza | Trasporto | Modello di scambio dei messaggi del contratto | Modello di scambio dei messaggi del contratto | 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 | ||
| Message | 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 del 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 altre informazioni, vedere Modalità di autenticazione di SecurityBindingElement.
Per altre informazioni, vedere Proteggere conversazioni e sessioni sicure.
Procedures
Per creare un'associazione personalizzata che usa symmetricSecurityBindingElement
Creare un'istanza della BindingElementCollection classe con il nome
outputBec.Chiamare il metodo
M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)statico , che restituisce un'istanza della SymmetricSecurityBindingElement classe .Aggiungere SymmetricSecurityBindingElement alla raccolta (
outputBec) chiamando il metodo di Collection<T> della classe BindingElement.Creare un'istanza della TextMessageEncodingBindingElement classe e aggiungerla alla raccolta (
outputBec). Specifica la codifica utilizzata dal binding.Creare un oggetto HttpTransportBindingElement e aggiungerlo alla raccolta (
outputBec). Specifica che l'associazione utilizza il trasporto HTTP.Creare una nuova associazione personalizzata creando un'istanza della CustomBinding classe e passando la raccolta
outputBecal costruttore.L'associazione personalizzata risultante condivide molte delle stesse caratteristiche dello standard WSHttpBinding. Specifica la sicurezza a livello di messaggio e le credenziali di Windows, ma disabilita le sessioni sicure, richiede che le credenziali del servizio siano specificate al di fuori del canale principale e non crittografa le firme. L'ultimo può essere controllato solo impostando la MessageProtectionOrder proprietà come illustrato nel passaggio 4. Gli altri due possono essere controllati attraverso le impostazioni nel vincolo standard.
Esempio
Descrizione
Nell'esempio seguente viene fornita una funzione completa per creare un'associazione personalizzata che usa un oggetto SymmetricSecurityBindingElement.
Codice
// 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