SecurityBindingElement Authentication Modes
Windows Communication Foundation (WCF) provides several modes by which clients and services authenticate to one another. You can create security binding elements for these authentication modes by using static methods on the SecurityBindingElement class or through configuration. This topic briefly describes the 18 authentication modes.
For an example of using the element for one of the authentication modes, see How to: Create a SecurityBindingElement for a Specified Authentication Mode.
Basic Configuration Programming
The following procedure describes how to set the authentication mode in a configuration file.
To set the authentication mode in configuration
To the <bindings> element, add a <customBinding>.
As a child element, add a <binding> element to the
<customBinding>
element.Add a
<security>
element to the<binding>
element.Set the
authenticationMode
attribute to one of the values described below. For example, the following code sets the mode toAnonymousForCertificate
.<bindings> <customBinding> <binding name="SecureCustomBinding"> <security authenticationMode ="AnonymousForCertificate" /> </binding> </customBinding> </bindings>
To set the mode programmatically
Determine the return type, which can be one of the following: SymmetricSecurityBindingElement, TransportSecurityBindingElement, AsymmetricSecurityBindingElement, or SecurityBindingElement.
Call the appropriate static method of the SecurityBindingElement class. For example, the following code calls the CreateAnonymousForCertificateBindingElement method.
SymmetricSecurityBindingElement b = SecurityBindingElement. CreateAnonymousForCertificateBindingElement();
Dim b As SymmetricSecurityBindingElement = _ SecurityBindingElement.CreateAnonymousForCertificateBindingElement()
Use the binding element to create the custom binding. For more information, see Custom Bindings.
Mode Descriptions
AnonymousForCertificate
With this authentication mode, the client is anonymous and the service is authenticated using an X.509 certificate. The security binding element is a SymmetricSecurityBindingElement returned by the CreateAnonymousForCertificateBindingElement method. Alternatively, set the authenticationMode
attribute of the <security>
element to AnonymousForCertificate
.
AnonymousForSslNegotiated
With this authentication mode, the client is anonymous and the service is authenticated using an X.509 certificate that is negotiated at run time. The security binding element is a SymmetricSecurityBindingElement returned by the CreateSslNegotiationBindingElement method when a value of false
is passed for the first parameter. Alternatively, set the authenticationMode
attribute to AnonymousForSslNegotiated
.
CertificateOverTransport
With this authentication mode, the client authenticates using an X.509 certificate that appears at the SOAP layer as an endorsing supporting token; that is, a token that signs the message signature. The service is authenticated using an X.509 certificate at the transport layer. The security binding element is a TransportSecurityBindingElement returned by the CreateCertificateOverTransportBindingElement method. Alternatively, set the authenticationMode
attribute to CertificateOverTransport
.
IssuedToken
With this authentication mode, the client does not authenticate to the service, as such; instead, the client authenticates to a security token service and receives a SAML token, which it then presents to the server to prove its knowledge of a shared key. The service is not authenticated to the client, as such, but the security token service encrypts the shared key as part of the issued token so that only the service can decrypt the key. The security binding element is a SymmetricSecurityBindingElement returned by the CreateIssuedTokenBindingElement method. Alternatively, set the authenticationMode
attribute to IssuedToken
.
IssuedTokenForCertificate
With this authentication mode, the client does not authenticate to the service, as such; instead, the client authenticates to a security token service and receives a SAML token, which it then presents to the server to prove its knowledge of a shared key. The issued token appears at the SOAP layer as either an endorsing supporting token or a bearer token; that is, a token that signs the message signature. The service authenticates to the client using an X.509 certificate. The security binding element is a SymmetricSecurityBindingElement returned by the CreateIssuedTokenForCertificateBindingElement method. Alternatively, set the authenticationMode
attribute to IssuedTokenForCertificate
.
IssuedTokenForSslNegotiated
With this authentication mode, the client does not authenticate to the service, as such; instead, the client authenticates to a security token service and receives a SAML token, which it then presents to the server to prove its knowledge of a shared key. The issued token appears at the SOAP layer as either an endorsing supporting token or a bearer token; that is, a token that signs the message signature. The service is authenticated using an X.509 certificate. The security binding element is a SymmetricSecurityBindingElement returned by the CreateIssuedTokenForSslBindingElement method. Alternatively, set the authenticationMode
attribute to IssuedTokenForSslNegotiated
.
IssuedTokenOverTransport
With this authentication mode, the client does not authenticate to the service, as such; instead, the client authenticates to a security token service and receives a SAML token, which it then presents to the server to prove its knowledge of a shared key. The issued token appears at the SOAP layer as either an endorsing supporting token or a bearer token; that is, a token that signs the message signature. The service is authenticated using an X.509 certificate at the transport layer. The security binding element is a TransportSecurityBindingElement
returned by the CreateIssuedTokenOverTransportBindingElement method. Alternatively, set the authenticationMode
attribute to IssuedTokenOverTransport
.
Kerberos
With this authentication mode, the client authenticates to the service using a Kerberos ticket. That same ticket also provides server authentication. The security binding element is a SymmetricSecurityBindingElement
returned by the CreateKerberosBindingElement method. Alternatively, set the authenticationMode
attribute to Kerberos
.
Note
In order to use this authentication mode, the service account must be associated with a service principal name (SPN). To do this, run the service under the NETWORK SERVICE account or the LOCAL SYSTEM account. Alternatively, use the SetSpn.exe tool to create an SPN for the service account. In either case, the client must use the correct SPN in the <servicePrincipalName> element, or by using the EndpointAddress constructor. For more information, see Service Identity and Authentication.
Note
When the Kerberos
authentication mode is used, the Anonymous and Delegation impersonation levels are not supported.
KerberosOverTransport
With this authentication mode, the client authenticates to the service using a Kerberos ticket. The Kerberos token appears at the SOAP layer as an endorsing supporting token; that is, a token that signs the message signature. The service is authenticated using an X.509 certificate at the transport layer. The security binding element is a TransportSecurityBindingElement
returned by the CreateKerberosOverTransportBindingElement method. Alternatively, set the authenticationMode
attribute to KerberosOverTransport
.
Note
In order to use this authentication mode, the service account must be associated with an SPN. To do this, run the service under the NETWORK SERVICE account or the LOCAL SYSTEM account. Alternatively, use the SetSpn.exe tool to create an SPN for the service account. In either case, the client must use the correct SPN in the <servicePrincipalName> element, or by using the EndpointAddress constructor. For more information, see Service Identity and Authentication.
MutualCertificate
With this authentication mode, the client authenticates using an X.509 certificate that appears at the SOAP layer as an endorsing supporting token; that is, a token that signs the message signature. The service is also authenticated using an X.509 certificate. The security binding element is a SymmetricSecurityBindingElement
returned by the CreateMutualCertificateBindingElement method. Alternatively, set the authenticationMode
attribute to MutualCertificate
.
MutualCertificateDuplex
With this authentication mode, the client authenticates using an X.509 certificate that appears at the SOAP layer as an endorsing supporting token; that is, a token that signs the message signature. The service is also authenticated using an X.509 certificate. The binding is a AsymmetricSecurityBindingElement
returned by the CreateMutualCertificateDuplexBindingElement method. Alternatively, set the authenticationMode
attribute to MutualCertificateDuplex
.
MutualSslNegotiated
With this authentication mode, the client and the service authenticate using X.509 certificates. The security binding element is a SymmetricSecurityBindingElement
returned by the CreateSslNegotiationBindingElement method when a value of true
is passed for the first parameter. Alternatively, set the authenticationMode
attribute to MutualSslNegotiated
.
SecureConversation
The security binding element is a SymmetricSecurityBindingElement
returned by the CreateSecureConversationBindingElement method. This method takes a SecurityBindingElement as a parameter, which is used during initialization to establish the secure session. Alternatively, set the authenticationMode
attribute to SecureConversation
.
If no bootstrap binding is specified, then the SspiNegotiated
authentication mode is used for bootstrap.
SspiNegotiation
With this authentication mode, a negotiation protocol is used to perform client and server authentication. Kerberos is used if possible; otherwise, NT LanMan (NTLM) is used. The security binding element is a SymmetricSecurityBindingElement
returned by the CreateSspiNegotiationBindingElement method. Alternatively, set the authenticationMode
attribute to SspiNegotiated
.
SspiNegotiatedOverTransport
With this authentication mode, a negotiation protocol is used to perform client and server authentication. Kerberos protocol is used if possible; otherwise, NTLM is used. The resulting token appears at the SOAP layer as an endorsing supporting token; that is, a token that signs the message signature. The service is additionally authenticated at the transport layer by an X.509 certificate. The security binding element is a TransportSecurityBindingElement
returned by the CreateSspiNegotiationOverTransportBindingElement method. Alternatively, set the authenticationMode
attribute to SspiNegotiatedOverTransport
.
UserNameForCertificate
With this authentication mode, the client authenticates to the service using a Username Token that appears at the SOAP layer as a signed supporting token; that is, a token that is signed by the message signature. The service authenticates to the client using an X.509 certificate. The security binding element is a SymmetricSecurityBindingElement
returned by the CreateUserNameForCertificateBindingElement method. Alternatively, set the authenticationMode
attribute to UserNameForCertificate
.
For the UserNameForCertificate
authentication mode, both the client and service must be using WS-Security 1.1.
UserNameForSslNegotiated
With this authentication mode, the client is authenticates using a Username Token which appears at the SOAP layer as a signed supporting token; that is, a token that is signed by the message signature. The service is authenticated using an X.509 certificate. The security binding element is a SymmetricSecurityBindingElement
returned by the CreateUserNameForSslBindingElement method. Alternatively, set the authenticationMode
attribute to UserNameForSslNegotiated
.
UserNameOverTransport
With this authentication mode, the client authenticates using a Username Token that appears at the SOAP layer as a signed supporting token; that is, a token that is signed by the message signature. The service is authenticated using an X.509 certificate at the transport layer. The security binding element is a TransportSecurityBindingElement
returned by the CreateUserNameOverTransportBindingElement method. Alternatively, set the authenticationMode
attribute to UserNameOverTransport
.