Condividi tramite


Procedura: impostare una conferma della firma

La conferma della firma è un meccanismo che permette all'iniziatore del messaggio di assicurare che la risposta ricevuta sia stata generata in risposta al messaggio originale del mittente. La conferma della firma è definita nella specifica WS-Security 1.1. Se un endpoint supporta WS-Security 1.0, non è possibile utilizzare la conferma della firma.

Nelle procedure seguenti viene illustrato come consentire la conferma della firma utilizzando un AsymmetricSecurityBindingElement. È possibile utilizzare la stessa procedura con un SymmetricSecurityBindingElement. La procedura si basa sui passaggi di base descritti in Procedura: Creare un'associazione personalizzata usando SecurityBindingElement.

Per consentire la conferma della firma nel codice

  1. Creare un'istanza della classe BindingElementCollection.

  2. Creare un'istanza della classe SymmetricSecurityBindingElement.

  3. Imposta RequireSignatureConfirmation su true.

  4. Aggiungere l'elemento di sicurezza alla raccolta di associazioni.

  5. Creare un'associazione personalizzata, come specificato in Procedura: Creare un'associazione personalizzata usando SecurityBindingElement.

Per consentire la conferma della firma nella configurazione

  1. Aggiungere un elemento <customBinding><bindings> alla sezione<bindings> del file di configurazione.

  2. Aggiungere un elemento <binding> e impostare l'attributo del nome su un valore appropriato.

  3. Aggiungere un elemento di codifica appropriato. Nell'esempio seguente viene aggiunto un elemento <TextMessageEncoding>.

  4. Aggiungere un elemento figlio <security>requireSignatureConfirmation e impostare l'attributo requireSignatureConfirmation true sutrue.

  5. Facoltativo. Per consentire la conferma della firma durante il bootstrap, aggiungere un elemento figlio <secureConversationBootstrap> e impostare l'attributo requireSignatureConfirmation su true.

  6. Aggiungere un elemento di trasporto appropriato. Nell'esempio seguente viene aggiunto un elemento <httpTransport>:

    <bindings>
      <customBinding>
        <binding name="SignatureConfirmationBinding">
          <security requireSignatureConfirmation="true">
            <secureConversationBootstrap requireSignatureConfirmation="true" />
              </security>
           <textMessageEncoding />
             <httpTransport />
        </binding>
      </customBinding>
    </bindings>
    

Esempio

Nel codice seguente viene creata un'istanza di SymmetricSecurityBindingElement e viene impostata la proprietà RequireSignatureConfirmation su true. Si noti che in questo esempio non viene utilizzato l'elemento <secureConversationBootstrap> illustrato nell'esempio precedente. In questo esempio viene illustrata la conferma della firma quando si utilizza un token di Windows (protocollo Kerberos). In questo caso, la firma del client viene restituita in tutte le risposte dal servizio e viene confermata dal client.

private Binding CreateBinding()
{
    BindingElementCollection bindings = new BindingElementCollection();
    KerberosSecurityTokenParameters tokens = new KerberosSecurityTokenParameters();
    SymmetricSecurityBindingElement security =
      new SymmetricSecurityBindingElement(tokens);

    // Require that every request and return be correlated.
    security.RequireSignatureConfirmation = true;

    bindings.Add(security);
    TextMessageEncodingBindingElement encoding = new TextMessageEncodingBindingElement();
    bindings.Add(encoding );
    HttpTransportBindingElement transport = new HttpTransportBindingElement();
    bindings.Add(transport);
    CustomBinding myBinding = new CustomBinding(bindings);
    return myBinding;
}
Private Function CreateBinding() As Binding
    Dim bindings As New BindingElementCollection()
    Dim tokens As New KerberosSecurityTokenParameters()

    Dim security As New SymmetricSecurityBindingElement(tokens)

    ' Require that every request and return be correlated.
    security.RequireSignatureConfirmation = True

    bindings.Add(security)
    Dim encoding As New TextMessageEncodingBindingElement()
    bindings.Add(encoding)
    Dim transport As New HttpTransportBindingElement()
    bindings.Add(transport)
    Dim myBinding As New CustomBinding(bindings)
    Return myBinding
End Function

Vedi anche