private Task ConnectAsync(IChannelHandlerContext context)
        {
            string registrationId = _message.Security.GetRegistrationID();
            string userAgent      = _message.ProductInfo;

            bool   hasPassword = false;
            string password    = null;

            if (_message.Security is SecurityProviderSymmetricKey)
            {
                hasPassword = true;
                string key = ((SecurityProviderSymmetricKey)_message.Security).GetPrimaryKey();
                password = ProvisioningSasBuilder.BuildSasSignature(Registration, key, string.Concat(_message.IdScope, '/', "registrations", '/', registrationId), TimeSpan.FromDays(1));
            }

            var message = new ConnectPacket()
            {
                CleanSession = true,
                ClientId     = registrationId,
                HasWill      = false,
                HasUsername  = true,
                Username     = string.Format(
                    CultureInfo.InvariantCulture,
                    UsernameFormat,
                    _message.IdScope,
                    registrationId,
                    ClientApiVersionHelper.ApiVersion,
                    Uri.EscapeDataString(userAgent)),
                HasPassword = hasPassword,
                Password    = hasPassword ? password : null
            };

            return(context.WriteAndFlushAsync(message));
        }
        public override Task ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            string audience = request.RequestUri.AbsolutePath.Trim('/');
            var    segments = audience.Split('/');

            _sasToken = ProvisioningSasBuilder.BuildSasSignature(Registration, this.SymmetricKey, string.Concat(segments[0], '/', segments[1], '/', segments[2]), TimeSpan.FromDays(1));
            SetAuthorizationHeader(request, _sasToken);

            return(base.ProcessHttpRequestAsync(request, cancellationToken));
        }
Ejemplo n.º 3
0
        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);
        }