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)); }
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); }