Procedimiento para crear un enlace federado dúplex
WSFederationHttpBinding solo admite los contratos de intercambio de mensajes de datagrama y solicitud/respuesta. Para utilizar el contrato de intercambio de mensajes dúplex, debe crear un enlace personalizado. Los procedimientos siguientes muestran cómo conseguirlo mediante configuración, utilizando la seguridad de modo de mensaje para los transportes TCP y HTTP, y la seguridad de modo mixto para el transporte TCP. El ejemplo de código donde se muestran los tres enlaces se encuentra al final de este tema.
También puede crear el enlace en el código. Para ver una descripción de la pila de elementos de enlace que se va a crear, consulte Creación de un enlace personalizado mediante SecurityBindingElement.
Para crear un enlace personalizado federado dúplex con HTTP
En el nodo <bindings> del archivo de configuración, cree un elemento <customBinding>.
Dentro del elemento <customBinding>, cree un elemento <binding> con el atributo
name
establecido enFederationDuplexHttpMessageSecurityBinding
.Dentro del elemento <binding>, cree un elemento <security> con el atributo
authenticationMode
establecido enSecureConversation
.Dentro del elemento <security>, cree un elemento <secureConversationBootstrap> con el atributo
authenticationMode
establecido enIssuedTokenForCertificate
oIssuedTokenForSslNegotiated
.Después del elemento <security>, cree un elemento <compositeDuplex> vacío.
Después del elemento <compositeDuplex>, cree un elemento <oneWay> vacío.
Después del elemento <oneWay>, cree un elemento <httpTransport> vacío.
Para crear un enlace personalizado federado dúplex con el modo de seguridad de mensajes TCP
En el nodo <bindings> del archivo de configuración, cree un elemento <customBinding>.
Dentro del elemento <customBinding>, cree un elemento <binding> con el atributo
name
establecido enFederationDuplexTcpMessageSecurityBinding
.Dentro del elemento <binding>, cree un elemento <security> con el atributo
authenticationMode
establecido enSecureConversation
.Dentro del elemento <security>, cree un elemento <secureConversationBootstrap> con el atributo
authenticationMode
establecido enIssuedTokenForCertificate
oIssuedTokenForSslNegotiated
.Después del elemento <security>, cree un elemento <tcpTransport> vacío.
Para crear un enlace personalizado federado dúplex con el modo de seguridad mixto TCP
En el nodo <bindings> del archivo de configuración, cree un elemento <customBinding>.
Dentro del elemento <customBinding>, cree un elemento <binding> con el atributo
name
establecido enFederationDuplexTcpTransportSecurityWithMessageCredentialBinding
.Dentro del elemento <binding>, cree un elemento <security> con el atributo
authenticationMode
establecido enSecureConversation
.Dentro del elemento <security>, cree un elemento <secureConversationBootstrap> con el atributo
authenticationMode
establecido enIssuedTokenForCertificate
oIssuedTokenForSslNegotiated
.Después del elemento <security>, cree un elemento <sslStreamSecurity> vacío.
Después del elemento <sslStreamSecurity>, cree un elemento <tcpTransport> vacío.
Ejemplo de código
Ejemplo con tres enlaces
- Inserte el código siguiente en su archivo de configuración.
Ejemplo
<bindings>
<customBinding>
<binding name="FederationDuplexHttpMessageSecurityBinding">
<!-- duplex contract requires secure conversation with require cancellation = true -->
<security authenticationMode="SecureConversation">
<secureConversationBootstrap authenticationMode="IssuedTokenForSslNegotiated" />
</security>
<compositeDuplex />
<oneWay />
<httpTransport />
</binding>
<!-- duplex over https is not supported -->
<binding name="FederationDuplexTcpMessageSecurityBinding">
<!-- duplex contract requires secure conversation with require cancellation = true -->
<security authenticationMode="SecureConversation">
<secureConversationBootstrap authenticationMode="IssuedTokenForSslNegotiated" />
</security>
<tcpTransport />
</binding>
<binding name="FederationDuplexTcpTransportSecurityWithMessageCredentialsBinding">
<!-- duplex contract requires secure conversation with require cancellation = true -->
<security authenticationMode="SecureConversation">
<secureConversationBootstrap authenticationMode="IssuedTokenOverTransport" />
</security>
<!-- requireClientCertificate = true or <windowsStreamSecurity /> can be used, but does not make sense for most scenarios -->
<sslStreamSecurity />
<tcpTransport />
</binding>
</customBinding>
</bindings>