MessageContractMemberAttribute.ProtectionLevel Proprietà

Definizione

Specifica se il membro deve essere trasmesso senza alcuna protezione, solo firmato oppure firmato e crittografato.

public:
 property System::Net::Security::ProtectionLevel ProtectionLevel { System::Net::Security::ProtectionLevel get(); void set(System::Net::Security::ProtectionLevel value); };
public System.Net.Security.ProtectionLevel ProtectionLevel { get; set; }
member this.ProtectionLevel : System.Net.Security.ProtectionLevel with get, set
Public Property ProtectionLevel As ProtectionLevel

Valore della proprietà

Uno dei valori di ProtectionLevel. Il valore predefinito è None.

Commenti

Per utilizzare la proprietà ProtectionLevel nell' attributo MessageHeaderAttribute o nell'attributo MessageBodyMemberAttribute è necessario configurare correttamente l'associazione e i comportamenti. Se queste funzionalità di sicurezza vengono utilizzate senza essere state configurate correttamente (ad esempio, se si utilizza il valore ProtectionLevel.Sign in una parte del messaggio senza fornire credenziali di sicurezza), il sistema genera un'eccezione in fase di esecuzione.

Inoltre, il livello di protezione è determinato in modo specifico per ogni intestazione. Tuttavia, il corpo SOAP presenta un solo livello di protezione, indipendentemente dal numero di parti del corpo. Il livello di protezione del corpo è determinato in base al valore della proprietà ProtectionLevel più elevato fra tutte le parti del corpo. Si consideri ad esempio la classe seguente:

[MessageContract]  
public class PatientRecord  
{  
   [MessageHeader(ProtectionLevel=None)] public int recordID;  
   [MessageHeader(ProtectionLevel=Sign)] public string patientName;  
   [MessageHeader(ProtectionLevel=EncryptAndSign)] public string SSN;  
   [MessageBody(ProtectionLevel=None)] public string comments;  
   [MessageBody(ProtectionLevel=Sign)] public string diagnosis;  
   [MessageBody(ProtectionLevel=EncryptAndSign)] public string medicalHistory;  
}  

In questo esempio, l'intestazione recordID non è protetta, la parte patientName è firmata e la parte SSN è crittografata e firmata. È presente almeno una parte del corpo, ovvero medicalHistory, per cui è stato impostato il livello ProtectionLevel.EncryptAndSign. Di conseguenza, anche se le parti del corpo comments e diagnosis presentano livelli di protezione inferiori, l'intero corpo del messaggio è crittografato e firmato.

Il comportamento della protezione in fase di esecuzione deriva dall'unione dei valori a livello di sicurezza su cui sono impostate le proprietà elencate di seguito. Queste proprietà presentano una struttura gerarchica. La configurazione del valore esterno determina l'impostazione predefinita per tutti gli ambiti più ristretti a meno che non venga impostato esplicitamente un valore diverso per un ambito più ristretto. In questo caso, il valore esterno rimane l'impostazione predefinita per tutti gli ambiti più ristretti, ad eccezione di quello impostato in modo specifico.

Ad esempio, se la proprietà ServiceContractAttribute.ProtectionLevel è impostata su ProtectionLevel.EncryptAndSign e nessuno degli altri ambiti più ristretti presenta impostazioni riguardanti il livello di protezione, tutti i messaggi di un contratto dell'operazione vengono crittografati e firmati. Se tuttavia per una di queste operazioni la proprietà OperationContractAttribute è impostata su ProtectionLevel.Sign, i messaggi di tale operazione vengono firmati. Tutti gli altri messaggi del contratto vengono invece crittografati e firmati.

Per informazioni dettagliate sui livelli di protezione e sui relativi presupposti e ambiti, vedere Informazioni sul livello di protezione.

Gli ambiti di impostazione di questi valori sono:

ServiceContractAttribute.ProtectionLevel

OperationContractAttribute.ProtectionLevel

FaultContractAttribute.ProtectionLevel

MessageContractAttribute.ProtectionLevel

La proprietà MessageContractMemberAttribute.ProtectionLevel è impostata su System.ServiceModel.MessageHeaderAttribute.

La proprietà MessageContractMemberAttribute.ProtectionLevel è impostata su System.ServiceModel.MessageBodyMemberAttribute.

Quando nel contratto non è stato specificato in modo esplicito alcun livello di protezione e l'associazione sottostante supporta la sicurezza (sia essa a livello di trasporto o di messaggio), il livello di protezione effettivo dell'intero contratto è ProtectionLevel.EncryptAndSign. Se l'associazione non supporta la sicurezza (ad esempio BasicHttpBinding), il livello di sicurezza System.Net.Security.ProtectionLevel effettivo è ProtectionLevel.None per l'intero contratto. Ne consegue che a seconda dell'associazione dell'endpoint i client possono richiedere un sistema diverso di protezione a livello di messaggio o di trasporto anche se il contratto prevede il livello di sicurezza ProtectionLevel.None.

Si applica a