private NetTcpRelaySecurity(EndToEndSecurityMode mode, Microsoft.ServiceBus.RelayClientAuthenticationType relayClientAuthenticationType, TcpRelayTransportSecurity transportSecurity, MessageSecurityOverRelayConnection messageSecurity) { bool flag = EndToEndSecurityModeHelper.IsDefined(mode); CultureInfo invariantCulture = CultureInfo.InvariantCulture; object[] str = new object[] { mode.ToString() }; Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.DebugAssert(flag, string.Format(invariantCulture, "Invalid RelaySecurityMode value: {0}.", str)); this.mode = mode; this.relayClientAuthenticationType = relayClientAuthenticationType; this.transportSecurity = (transportSecurity == null ? new TcpRelayTransportSecurity() : transportSecurity); this.messageSecurity = (messageSecurity == null ? new MessageSecurityOverRelayConnection() : messageSecurity); }
internal static bool TryCreate(SecurityBindingElement wsSecurity, EndToEndSecurityMode mode, Microsoft.ServiceBus.RelayClientAuthenticationType relayClientAuthenticationType, bool isReliableSessionEnabled, TcpRelayTransportSecurity tcpTransportSecurity, out NetTcpRelaySecurity security) { security = null; MessageSecurityOverRelayConnection messageSecurityOverRelayConnection = null; if ((mode == EndToEndSecurityMode.Message || mode == EndToEndSecurityMode.TransportWithMessageCredential) && !MessageSecurityOverRelayConnection.TryCreate(wsSecurity, isReliableSessionEnabled, out messageSecurityOverRelayConnection)) { return(false); } security = new NetTcpRelaySecurity(mode, relayClientAuthenticationType, tcpTransportSecurity, messageSecurityOverRelayConnection); if (wsSecurity == null) { return(true); } Type type = typeof(SecurityElementBase); object[] objArray = new object[] { security.CreateMessageSecurity(isReliableSessionEnabled, wsSecurity.MessageSecurityVersion), wsSecurity, false }; return((bool)InvokeHelper.InvokeStaticMethod(type, "AreBindingsMatching", objArray)); }
internal static bool TryCreate(SecurityBindingElement sbe, bool isReliableSession, out MessageSecurityOverRelayConnection messageSecurity) { MessageCredentialType messageCredentialType; SecurityBindingElement securityBindingElement; IssuedSecurityTokenParameters issuedSecurityTokenParameter; messageSecurity = null; if (sbe == null) { return(false); } if (!sbe.IncludeTimestamp) { return(false); } if (sbe.MessageSecurityVersion != MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11 && sbe.MessageSecurityVersion != MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10) { return(false); } if (sbe.SecurityHeaderLayout != SecurityHeaderLayout.Strict) { return(false); } if (!SecurityUtil.SecurityBindingElement.IsSecureConversationBinding(sbe, true, out securityBindingElement)) { return(false); } if (securityBindingElement is TransportSecurityBindingElement) { if (SecurityUtil.SecurityBindingElement.IsUserNameOverTransportBinding(securityBindingElement)) { messageCredentialType = MessageCredentialType.UserName; } else if (SecurityUtil.SecurityBindingElement.IsCertificateOverTransportBinding(securityBindingElement)) { messageCredentialType = MessageCredentialType.Certificate; } else if (!SecurityUtil.SecurityBindingElement.IsSspiNegotiationOverTransportBinding(securityBindingElement, true)) { if (!SecurityUtil.SecurityBindingElement.IsIssuedTokenOverTransportBinding(securityBindingElement, out issuedSecurityTokenParameter)) { return(false); } if (!SecurityUtil.IssuedSecurityTokenParameters.IsInfoCardParameters(issuedSecurityTokenParameter)) { return(false); } messageCredentialType = MessageCredentialType.IssuedToken; } else { messageCredentialType = MessageCredentialType.Windows; } } else if (SecurityUtil.SecurityBindingElement.IsUserNameForSslBinding(securityBindingElement, true)) { messageCredentialType = MessageCredentialType.UserName; } else if (SecurityUtil.SecurityBindingElement.IsSslNegotiationBinding(securityBindingElement, true, true)) { messageCredentialType = MessageCredentialType.Certificate; } else if (SecurityUtil.SecurityBindingElement.IsSspiNegotiationBinding(securityBindingElement, true)) { messageCredentialType = MessageCredentialType.Windows; } else if (!SecurityUtil.SecurityBindingElement.IsIssuedTokenForSslBinding(securityBindingElement, true, out issuedSecurityTokenParameter)) { if (!SecurityUtil.SecurityBindingElement.IsSslNegotiationBinding(securityBindingElement, false, true)) { return(false); } messageCredentialType = MessageCredentialType.None; } else { if (!SecurityUtil.IssuedSecurityTokenParameters.IsInfoCardParameters(issuedSecurityTokenParameter)) { return(false); } messageCredentialType = MessageCredentialType.IssuedToken; } messageSecurity = new MessageSecurityOverRelayConnection() { ClientCredentialType = messageCredentialType }; if (messageCredentialType != MessageCredentialType.IssuedToken) { messageSecurity.algorithmSuite = securityBindingElement.DefaultAlgorithmSuite; } return(true); }