Public Overloads Overrides Function CreateBindingElements() As BindingElementCollection
'SecurityBindingElement sbe = bec.Find<SecurityBindingElement>();
Dim bec As New BindingElementCollection()
' By default http transport is used
Dim securityBinding As SecurityBindingElement
Dim transport As BindingElement
Select Case assertion
Case WseSecurityAssertion.UsernameOverTransport
transport = New HttpsTransportBindingElement()
securityBinding = DirectCast(SecurityBindingElement.CreateUserNameOverTransportBindingElement(), TransportSecurityBindingElement)
If m_establishSecurityContext = True Then
Throw New InvalidOperationException("Secure Conversation is not supported for this Security Assertion Type")
End If
If m_requireSignatureConfirmation = True Then
Throw New InvalidOperationException("Signature Confirmation is not supported for this Security Assertion Type")
End If
Exit Select
Case WseSecurityAssertion.MutualCertificate10
transport = New HttpTransportBindingElement()
securityBinding = SecurityBindingElement.CreateMutualCertificateBindingElement(MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10)
If m_requireSignatureConfirmation = True Then
Throw New InvalidOperationException("Signature Confirmation is not supported for this Security Assertion Type")
End If
DirectCast(securityBinding, AsymmetricSecurityBindingElement).MessageProtectionOrder = m_messageProtectionOrder
Exit Select
Case WseSecurityAssertion.UsernameForCertificate
transport = New HttpTransportBindingElement()
securityBinding = DirectCast(SecurityBindingElement.CreateUserNameForCertificateBindingElement(), SymmetricSecurityBindingElement)
' We want signatureconfirmation on the bootstrap process
' either for the application messages or for the RST/RSTR
DirectCast(securityBinding, SymmetricSecurityBindingElement).RequireSignatureConfirmation = m_requireSignatureConfirmation
DirectCast(securityBinding, SymmetricSecurityBindingElement).MessageProtectionOrder = m_messageProtectionOrder
Exit Select
Case WseSecurityAssertion.AnonymousForCertificate
transport = New HttpTransportBindingElement()
securityBinding = DirectCast(SecurityBindingElement.CreateAnonymousForCertificateBindingElement(), SymmetricSecurityBindingElement)
DirectCast(securityBinding, SymmetricSecurityBindingElement).RequireSignatureConfirmation = m_requireSignatureConfirmation
DirectCast(securityBinding, SymmetricSecurityBindingElement).MessageProtectionOrder = m_messageProtectionOrder
Exit Select
Case WseSecurityAssertion.MutualCertificate11
transport = New HttpTransportBindingElement()
securityBinding = SecurityBindingElement.CreateMutualCertificateBindingElement(MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11)
DirectCast(securityBinding, SymmetricSecurityBindingElement).RequireSignatureConfirmation = m_requireSignatureConfirmation
DirectCast(securityBinding, SymmetricSecurityBindingElement).MessageProtectionOrder = m_messageProtectionOrder
Exit Select
Case WseSecurityAssertion.Kerberos
transport = New HttpTransportBindingElement()
securityBinding = DirectCast(SecurityBindingElement.CreateKerberosBindingElement(), SymmetricSecurityBindingElement)
DirectCast(securityBinding, SymmetricSecurityBindingElement).RequireSignatureConfirmation = m_requireSignatureConfirmation
DirectCast(securityBinding, SymmetricSecurityBindingElement).MessageProtectionOrder = m_messageProtectionOrder
Exit Select
Case Else
Throw New NotSupportedException("This supplied Wse security assertion is not supported")
End Select
'Set defaults for the security binding
securityBinding.IncludeTimestamp = True
' Derived Keys
' Set the preference for derived keys before creating the binding for SecureConversation.
securityBinding.SetKeyDerivation(m_requireDerivedKeys)
'Secure Conversation
If m_establishSecurityContext = True Then
Dim secureconversation As SymmetricSecurityBindingElement = DirectCast(SymmetricSecurityBindingElement.CreateSecureConversationBindingElement(securityBinding, False), SymmetricSecurityBindingElement)
' This is the default
'secureconversation.DefaultProtectionLevel = ProtectionLevel.EncryptAndSign;
'Set defaults for the secure conversation binding
secureconversation.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic256
' We do not want signature confirmation on the application level messages
' when secure conversation is enabled.
secureconversation.RequireSignatureConfirmation = False
secureconversation.MessageProtectionOrder = m_messageProtectionOrder
secureconversation.SetKeyDerivation(m_requireDerivedKeys)
securityBinding = secureconversation
End If
' Add the security binding to the binding collection
bec.Add(securityBinding)
' Add the message encoder.
Dim textelement As New TextMessageEncodingBindingElement()
textelement.MessageVersion = System.ServiceModel.Channels.MessageVersion.Soap11WSAddressingAugust2004
'These are the defaults required for WSE
'textelement.MessageVersion = MessageVersion.Soap11Addressing1;
'textelement.WriteEncoding = System.Text.Encoding.UTF8;
bec.Add(textelement)
' Add the transport
bec.Add(transport)
' return the binding elements
Return bec
End Function
public override BindingElementCollection CreateBindingElements()
{
//SecurityBindingElement sbe = bec.Find<SecurityBindingElement>();
BindingElementCollection bec = new BindingElementCollection();
// By default http transport is used
SecurityBindingElement securityBinding;
BindingElement transport;
switch (assertion)
{
case WseSecurityAssertion.UsernameOverTransport:
transport = new HttpsTransportBindingElement();
securityBinding = (TransportSecurityBindingElement)SecurityBindingElement.CreateUserNameOverTransportBindingElement();
if (establishSecurityContext == true)
throw new InvalidOperationException("Secure Conversation is not supported for this Security Assertion Type");
if (requireSignatureConfirmation == true)
throw new InvalidOperationException("Signature Confirmation is not supported for this Security Assertion Type");
break;
case WseSecurityAssertion.MutualCertificate10:
transport = new HttpTransportBindingElement();
securityBinding = SecurityBindingElement.CreateMutualCertificateBindingElement(MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10);
if (requireSignatureConfirmation == true)
throw new InvalidOperationException("Signature Confirmation is not supported for this Security Assertion Type");
((AsymmetricSecurityBindingElement)securityBinding).MessageProtectionOrder = messageProtectionOrder;
break;
case WseSecurityAssertion.UsernameForCertificate:
transport = new HttpTransportBindingElement();
securityBinding = (SymmetricSecurityBindingElement)SecurityBindingElement.CreateUserNameForCertificateBindingElement();
// We want signatureconfirmation on the bootstrap process
// either for the application messages or for the RST/RSTR
((SymmetricSecurityBindingElement)securityBinding).RequireSignatureConfirmation = requireSignatureConfirmation;
((SymmetricSecurityBindingElement)securityBinding).MessageProtectionOrder = messageProtectionOrder;
break;
case WseSecurityAssertion.AnonymousForCertificate:
transport = new HttpTransportBindingElement();
securityBinding = (SymmetricSecurityBindingElement)SecurityBindingElement.CreateAnonymousForCertificateBindingElement();
((SymmetricSecurityBindingElement)securityBinding).RequireSignatureConfirmation = requireSignatureConfirmation;
((SymmetricSecurityBindingElement)securityBinding).MessageProtectionOrder = messageProtectionOrder;
break;
case WseSecurityAssertion.MutualCertificate11:
transport = new HttpTransportBindingElement();
securityBinding = SecurityBindingElement.CreateMutualCertificateBindingElement(MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11);
((SymmetricSecurityBindingElement)securityBinding).RequireSignatureConfirmation = requireSignatureConfirmation;
((SymmetricSecurityBindingElement)securityBinding).MessageProtectionOrder = messageProtectionOrder;
break;
case WseSecurityAssertion.Kerberos:
transport = new HttpTransportBindingElement();
securityBinding = (SymmetricSecurityBindingElement)SecurityBindingElement.CreateKerberosBindingElement();
((SymmetricSecurityBindingElement)securityBinding).RequireSignatureConfirmation = requireSignatureConfirmation;
((SymmetricSecurityBindingElement)securityBinding).MessageProtectionOrder = messageProtectionOrder;
break;
default:
throw new NotSupportedException("This supplied Wse security assertion is not supported");
}
//Set defaults for the security binding
securityBinding.IncludeTimestamp = true;
// Derived Keys
// set the preference for derived keys before creating SecureConversationBindingElement
securityBinding.SetKeyDerivation(requireDerivedKeys);
//Secure Conversation
if (establishSecurityContext == true)
{
SymmetricSecurityBindingElement secureconversation =
(SymmetricSecurityBindingElement)SymmetricSecurityBindingElement.CreateSecureConversationBindingElement(
securityBinding, false);
// This is the default
//secureconversation.DefaultProtectionLevel = ProtectionLevel.EncryptAndSign;
//Set defaults for the secure conversation binding
secureconversation.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic256;
// We do not want signature confirmation on the application level messages
// when secure conversation is enabled.
secureconversation.RequireSignatureConfirmation = false;
secureconversation.MessageProtectionOrder = messageProtectionOrder;
secureconversation.SetKeyDerivation(requireDerivedKeys);
securityBinding = secureconversation;
}
// Add the security binding to the binding collection
bec.Add(securityBinding);
// Add the message encoder.
TextMessageEncodingBindingElement textelement = new TextMessageEncodingBindingElement();
textelement.MessageVersion = MessageVersion.Soap11WSAddressingAugust2004;
//These are the defaults required for WSE
//textelement.MessageVersion = MessageVersion.Soap11Addressing1;
//textelement.WriteEncoding = System.Text.Encoding.UTF8;
bec.Add(textelement);
// Add the transport
bec.Add(transport);
// return the binding elements
return bec;
}