public Task <AmqpConnection> OpenConnectionAsync(Uri addressUri, TimeSpan timeout) { SaslHandler saslHandler = null; if (!string.IsNullOrEmpty(addressUri.UserInfo)) { string[] parts = addressUri.UserInfo.Split(':'); if (parts.Length > 2) { throw new ArgumentException("addressUri.UserInfo " + addressUri.UserInfo); } string userName = Uri.UnescapeDataString(parts[0]); string password = parts.Length > 1 ? Uri.UnescapeDataString(parts[1]) : string.Empty; #if !PCL saslHandler = new SaslPlainHandler() { AuthenticationIdentity = userName, Password = password }; #endif } return(OpenConnectionAsync(addressUri, saslHandler, timeout)); }
public static AmqpSettings CreateAmqpSettings( Version amqpVersion, bool useSslStreamSecurity, bool hasTokenProvider, string sslHostName = null, bool useWebSockets = false, bool sslStreamUpgrade = false, System.Net.NetworkCredential networkCredential = null, System.Net.Security.RemoteCertificateValidationCallback certificateValidationCallback = null, bool forceTokenProvider = true) { AmqpSettings settings = new AmqpSettings(); if (useSslStreamSecurity && !useWebSockets && sslStreamUpgrade) { var tlsSettings = new TlsTransportSettings { CertificateValidationCallback = certificateValidationCallback, TargetHost = sslHostName }; var tlsProvider = new TlsTransportProvider(tlsSettings); tlsProvider.Versions.Add(new AmqpVersion(amqpVersion)); settings.TransportProviders.Add(tlsProvider); } if (hasTokenProvider || networkCredential != null) { SaslTransportProvider saslProvider = new SaslTransportProvider(); saslProvider.Versions.Add(new AmqpVersion(amqpVersion)); settings.TransportProviders.Add(saslProvider); if (forceTokenProvider) { saslProvider.AddHandler(new SaslAnonymousHandler(CbsSaslMechanismName)); } else if (networkCredential != null) { var plainHandler = new SaslPlainHandler { AuthenticationIdentity = networkCredential.UserName, Password = networkCredential.Password }; saslProvider.AddHandler(plainHandler); } else { // old client behavior: keep it for validation only saslProvider.AddHandler(new SaslExternalHandler()); } } AmqpTransportProvider amqpProvider = new AmqpTransportProvider(); amqpProvider.Versions.Add(new AmqpVersion(amqpVersion)); settings.TransportProviders.Add(amqpProvider); return(settings); }
public static AmqpSettings CreateAmqpSettings( Version amqpVersion, bool useSslStreamSecurity, string sslHostName = null, bool useWebSockets = false, bool sslStreamUpgrade = false, System.Net.NetworkCredential networkCredential = null) { var amqpSettings = new AmqpSettings(); if (useSslStreamSecurity && !useWebSockets && sslStreamUpgrade) { var tlsSettings = new TlsTransportSettings { TargetHost = sslHostName }; var tlsProvider = new TlsTransportProvider(tlsSettings); tlsProvider.Versions.Add(new AmqpVersion(amqpVersion)); amqpSettings.TransportProviders.Add(tlsProvider); } if (networkCredential != null) { var saslTransportProvider = new SaslTransportProvider(); saslTransportProvider.Versions.Add(new AmqpVersion(amqpVersion)); amqpSettings.TransportProviders.Add(saslTransportProvider); if (networkCredential != null) { var plainHandler = new SaslPlainHandler { AuthenticationIdentity = networkCredential.UserName, Password = networkCredential.Password }; saslTransportProvider.AddHandler(plainHandler); } } var amqpTransportProvider = new AmqpTransportProvider(); amqpTransportProvider.Versions.Add(new AmqpVersion(amqpVersion)); amqpSettings.TransportProviders.Add(amqpTransportProvider); return(amqpSettings); }
public override AmqpSettings CreateAmqpSettings(string idScope) { var settings = new AmqpSettings(); var saslProvider = new SaslTransportProvider(); saslProvider.Versions.Add(AmqpConstants.DefaultProtocolVersion); settings.TransportProviders.Add(saslProvider); SaslPlainHandler saslHandler = new SaslPlainHandler(); saslHandler.AuthenticationIdentity = $"{idScope}/registrations/{_security.GetRegistrationID()}"; string key = _security.GetPrimaryKey(); saslHandler.Password = ProvisioningSasBuilder.BuildSasSignature("registration", key, saslHandler.AuthenticationIdentity, TimeSpan.FromDays(1)); saslProvider.AddHandler(saslHandler); return(settings); }
internal AmqpSettings CreateAmqpSettings(string sslHostName) { AmqpSettings amqpSetting = new AmqpSettings(); if (this.SslStreamUpgrade) { TlsTransportSettings tlsTransportSetting = new TlsTransportSettings() { CertificateValidationCallback = this.CertificateValidationCallback, TargetHost = sslHostName }; TlsTransportProvider tlsTransportProvider = new TlsTransportProvider(tlsTransportSetting); tlsTransportProvider.Versions.Add(new Microsoft.ServiceBus.Messaging.Amqp.AmqpVersion(1, 0, 0)); amqpSetting.TransportProviders.Add(tlsTransportProvider); } if (this.TokenProvider != null || this.NetworkCredential != null) { SaslTransportProvider saslTransportProvider = new SaslTransportProvider(); saslTransportProvider.Versions.Add(new Microsoft.ServiceBus.Messaging.Amqp.AmqpVersion(1, 0, 0)); amqpSetting.TransportProviders.Add(saslTransportProvider); if (this.NetworkCredential == null) { saslTransportProvider.AddHandler(new SaslExternalHandler()); } else { SaslPlainHandler saslPlainHandler = new SaslPlainHandler() { AuthenticationIdentity = this.NetworkCredential.UserName, Password = this.NetworkCredential.Password }; saslTransportProvider.AddHandler(saslPlainHandler); } } AmqpTransportProvider amqpTransportProvider = new AmqpTransportProvider(); amqpTransportProvider.Versions.Add(new Microsoft.ServiceBus.Messaging.Amqp.AmqpVersion(this.AmqpVersion)); amqpSetting.TransportProviders.Add(amqpTransportProvider); return(amqpSetting); }
public TestAmqpBroker(IList <string> endpoints, string userInfo, string sslValue, string[] queues) { this.containerId = "TestAmqpBroker-P" + Process.GetCurrentProcess().Id; this.maxFrameSize = 64 * 1024; this.txnManager = new TxnManager(); this.connections = new Dictionary <SequenceNumber, AmqpConnection>(); this.queues = new Dictionary <string, TestQueue>(); if (queues != null) { foreach (string q in queues) { this.queues.Add(q, new TestQueue(this)); } } else { this.implicitQueue = true; } // create and initialize AmqpSettings AmqpSettings settings = new AmqpSettings(); X509Certificate2 certificate = sslValue == null ? null : GetCertificate(sslValue); settings.RuntimeProvider = this; SaslHandler saslHandler; if (userInfo != null) { string[] creds = userInfo.Split(':'); string usernanme = Uri.UnescapeDataString(creds[0]); string password = creds.Length == 1 ? string.Empty : Uri.UnescapeDataString(creds[1]); saslHandler = new SaslPlainHandler(new TestPlainAuthenticator(userInfo, password)); } else { saslHandler = new SaslAnonymousHandler(); } SaslTransportProvider saslProvider = new SaslTransportProvider(); saslProvider.AddHandler(saslHandler); saslProvider.Versions.Add(new AmqpVersion(1, 0, 0)); settings.TransportProviders.Add(saslProvider); AmqpTransportProvider amqpProvider = new AmqpTransportProvider(); amqpProvider.Versions.Add(new AmqpVersion(1, 0, 0)); settings.TransportProviders.Add(amqpProvider); // create and initialize transport listeners TransportListener[] listeners = new TransportListener[endpoints.Count]; for (int i = 0; i < endpoints.Count; i++) { Uri addressUri = new Uri(endpoints[i]); if (addressUri.Scheme.Equals(AmqpConstants.SchemeAmqps, StringComparison.OrdinalIgnoreCase)) { if (certificate == null) { throw new InvalidOperationException("/cert option was not set when amqps address is specified."); } TcpTransportSettings tcpSettings = new TcpTransportSettings() { Host = addressUri.Host, Port = addressUri.Port }; TlsTransportSettings tlsSettings = new TlsTransportSettings(tcpSettings) { Certificate = certificate, IsInitiator = false }; listeners[i] = tlsSettings.CreateListener(); } else if (addressUri.Scheme.Equals(AmqpConstants.SchemeAmqp, StringComparison.OrdinalIgnoreCase)) { TcpTransportSettings tcpSettings = new TcpTransportSettings() { Host = addressUri.Host, Port = addressUri.Port }; listeners[i] = tcpSettings.CreateListener(); } #if !NETSTANDARD else if (addressUri.Scheme.Equals("ws", StringComparison.OrdinalIgnoreCase)) { WebSocketTransportSettings wsSettings = new WebSocketTransportSettings() { Uri = addressUri }; listeners[i] = wsSettings.CreateListener(); } #endif else { throw new NotSupportedException(addressUri.Scheme); } } this.transportListener = new AmqpTransportListener(listeners, settings); this.settings = settings; }
public void Start() { // create and initialize AmqpSettings AmqpSettings settings = new AmqpSettings(); X509Certificate2 certificate = this.sslValue == null ? null : GetCertificate(this.sslValue); settings.RuntimeProvider = this; SaslHandler saslHandler; if (this.userInfo != null) { string[] creds = this.userInfo.Split(':'); string usernanme = Uri.UnescapeDataString(creds[0]); string password = creds.Length == 1 ? string.Empty : Uri.UnescapeDataString(creds[1]); saslHandler = new SaslPlainHandler(new TestPlainAuthenticator(this.userInfo, password)); } else { saslHandler = new SaslAnonymousHandler(); } SaslTransportProvider saslProvider = new SaslTransportProvider(AmqpVersion.V100); saslProvider.AddHandler(saslHandler); settings.TransportProviders.Add(saslProvider); AmqpTransportProvider amqpProvider = new AmqpTransportProvider(AmqpVersion.V100); settings.TransportProviders.Add(amqpProvider); // create and initialize transport listeners TransportListener[] listeners = new TransportListener[this.endpoints.Count]; for (int i = 0; i < this.endpoints.Count; i++) { Uri addressUri = new Uri(this.endpoints[i]); if (addressUri.Scheme.Equals(AmqpConstants.SchemeAmqps, StringComparison.OrdinalIgnoreCase)) { if (certificate == null) { throw new InvalidOperationException("/cert option was not set when amqps address is specified."); } TcpTransportSettings tcpSettings = new TcpTransportSettings() { Host = addressUri.Host, Port = addressUri.Port }; TlsTransportSettings tlsSettings = new TlsTransportSettings(tcpSettings) { Certificate = certificate, IsInitiator = false }; listeners[i] = tlsSettings.CreateListener(); } else if (addressUri.Scheme.Equals(AmqpConstants.SchemeAmqp, StringComparison.OrdinalIgnoreCase)) { TcpTransportSettings tcpSettings = new TcpTransportSettings() { Host = addressUri.Host, Port = addressUri.Port }; listeners[i] = tcpSettings.CreateListener(); } else if (addressUri.Scheme.Equals("ws", StringComparison.OrdinalIgnoreCase)) { WebSocketTransportSettings wsSettings = new WebSocketTransportSettings() { Uri = addressUri }; listeners[i] = wsSettings.CreateListener(); } else { throw new NotSupportedException(addressUri.Scheme); } } this.settings = settings; this.transportListener = new AmqpTransportListener(listeners, settings); this.transportListener.Listen(this.OnAcceptTransport); }