public async Task SendEventHubsMessage(string message) { string hubNamespace = _settings.EventHubNamespace; var endpoint = new Uri($"sb://{hubNamespace}.servicebus.windows.net/"); string hubName = _settings.EventHubName; var client = EventHubClient.CreateWithTokenProvider( endpoint, hubName, new ManagedIdentityEventHubsTokenProvider(_settings.ManagedIdentityTenantId)); byte[] bytes = Encoding.UTF8.GetBytes($"{message} ({DateTime.UtcNow:HH:mm:ss})"); await client.SendAsync(new EventData(bytes)); }
/// <inheritdoc /> protected override async Task <BoolResult> StartupCoreAsync(OperationContext context) { await base.StartupCoreAsync(context).ThrowIfFailure(); // Retry behavior in the Azure Event Hubs Client Library is controlled by the RetryPolicy property on the EventHubClient class. // The default policy retries with exponential backoff when Azure Event Hub returns a transient EventHubsException or an OperationCanceledException. if (ManagedIdentityUriHelper.TryParseForManagedIdentity(_configuration.EventHubConnectionString, out Uri eventHubNamespaceUri, out string eventHubName, out string managedIdentityId)) { // https://docs.microsoft.com/en-us/dotnet/api/overview/azure/service-to-service-authentication#connection-string-support var tokenProvider = new ManagedIdentityTokenProvider(new AzureServiceTokenProvider($"RunAs=App;AppId={managedIdentityId}")); _eventHubClient = EventHubClient.CreateWithTokenProvider( eventHubNamespaceUri, eventHubName, tokenProvider); }
public async Task SendEventHubsMessage() { string hubNamespace = _settings.EventHubNamespace; var endpoint = new Uri($"sb://{hubNamespace}.servicebus.windows.net/"); string hubName = _settings.EventHubName; var client = EventHubClient.CreateWithTokenProvider( endpoint, hubName, new ManagedIdentityEventHubsTokenProvider(_settings.ManagedIdentityTenantId)); // You can also do this (but then you can't specify the tenant used): // var client = EventHubClient.CreateWithManagedIdentity(endpoint, hubName); byte[] bytes = Encoding.UTF8.GetBytes($"Test message {Guid.NewGuid()} ({DateTime.UtcNow:HH:mm:ss})"); await client.SendAsync(new EventData(bytes)); }
public async Task UseITokenProviderWithAad() { var appAuthority = ""; var aadAppId = ""; var aadAppSecret = ""; AzureActiveDirectoryTokenProvider.AuthenticationCallback authCallback = async(audience, authority, state) => { var authContext = new AuthenticationContext(authority); var cc = new ClientCredential(aadAppId, aadAppSecret); var authResult = await authContext.AcquireTokenAsync(audience, cc); return(authResult.AccessToken); }; var tokenProvider = TokenProvider.CreateAzureActiveDirectoryTokenProvider(authCallback, appAuthority); // Create new client with updated connection string. await using (var scope = await EventHubScope.CreateAsync(1)) { var connectionString = TestUtility.BuildEventHubsConnectionString(scope.EventHubName); var csb = new EventHubsConnectionStringBuilder(connectionString); var ehClient = EventHubClient.CreateWithTokenProvider(csb.Endpoint, csb.EntityPath, tokenProvider); // Send one event TestUtility.Log($"Sending one message."); var ehSender = ehClient.CreatePartitionSender("0"); var eventData = new EventData(Encoding.UTF8.GetBytes("Hello EventHub!")); await ehSender.SendAsync(eventData); // Receive event. PartitionReceiver ehReceiver = null; try { TestUtility.Log($"Receiving one message."); ehReceiver = ehClient.CreateReceiver(PartitionReceiver.DefaultConsumerGroupName, "0", EventPosition.FromStart()); var msg = await ehReceiver.ReceiveAsync(1); Assert.True(msg != null, "Failed to receive message."); } finally { await ehReceiver?.CloseAsync(); } } }
internal EventHubClient CreateEventHubClient() { // Token provider already provided? if (this.tokenProvider == null) { return(EventHubClient.CreateFromConnectionString(this.eventHubConnectionString)); } else { return(EventHubClient.CreateWithTokenProvider( this.EndpointAddress, this.EventHubPath, this.tokenProvider, this.OperationTimeout, this.TransportType)); } }
public async Task UseITokenProviderWithSas() { // Generate SAS token provider. await using (var scope = await EventHubScope.CreateAsync(1)) { var connectionString = TestUtility.BuildEventHubsConnectionString(scope.EventHubName); var csb = new EventHubsConnectionStringBuilder(connectionString); var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(csb.SasKeyName, csb.SasKey); // Create new client with updated connection string. var ehClient = EventHubClient.CreateWithTokenProvider(csb.Endpoint, csb.EntityPath, tokenProvider); // Send one event TestUtility.Log($"Sending one message."); var ehSender = ehClient.CreatePartitionSender("0"); var eventData = new EventData(Encoding.UTF8.GetBytes("Hello EventHub!")); await ehSender.SendAsync(eventData); // Receive event. PartitionReceiver ehReceiver = null; try { TestUtility.Log($"Receiving one message."); ehReceiver = ehClient.CreateReceiver(PartitionReceiver.DefaultConsumerGroupName, "0", EventPosition.FromStart()); var msg = await ehReceiver.ReceiveAsync(1); Assert.True(msg != null, "Failed to receive message."); } finally { await ehReceiver?.CloseAsync(); } // Get EH runtime information. TestUtility.Log($"Getting Event Hub runtime information."); var ehInfo = await ehClient.GetRuntimeInformationAsync(); Assert.True(ehInfo != null, "Failed to get runtime information."); // Get EH partition runtime information. TestUtility.Log($"Getting Event Hub partition '0' runtime information."); var partitionInfo = await ehClient.GetPartitionRuntimeInformationAsync("0"); Assert.True(ehInfo != null, "Failed to get runtime partition information."); } }
static async Task ClientCredentialsScenarioAsync() { TokenProvider tp = TokenProvider.CreateAzureActiveDirectoryTokenProvider( async(audience, authority, state) => { IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(ClientId) .WithAuthority(authority) .WithClientSecret(ConfigurationManager.AppSettings["clientSecret"]) .Build(); var authResult = await app.AcquireTokenForClient(new string[] { $"{audience}/.default" }).ExecuteAsync(); return(authResult.AccessToken); }); var ehClient = EventHubClient.CreateWithTokenProvider(new Uri($"sb://{EventHubNamespace}/"), EventHubName, tp); await SendReceiveAsync(ehClient); }
static async Task ClientAssertionCertScenarioAsync() { X509Certificate2 certificate = GetCertificate(); TokenProvider tp = TokenProvider.CreateAzureActiveDirectoryTokenProvider( async(audience, authority, state) => { IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(ClientId) .WithAuthority(authority) .WithCertificate(certificate) .Build(); var authResult = await app.AcquireTokenForClient(new string[] { $"{audience}/.default" }).ExecuteAsync(); return(authResult.AccessToken); }); var ehClient = EventHubClient.CreateWithTokenProvider(new Uri($"sb://{EventHubNamespace}/"), EventHubName, tp); await SendReceiveAsync(ehClient); }