private TokenProvider createTokenProvider()
        {
            if (_config.IsOnPrem)
            {
                X509Certificate2 cert = getCertificateBySubject(_config.CertificateSubject);
                var auth          = string.Format(CultureInfo.InvariantCulture, AAD, _config.TenantName);
                var tokenProvider = TokenProvider.CreateAzureActiveDirectoryTokenProvider(async(audience, authority, state) =>
                {
                    IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(_config.AadClientId)
                                                         .WithAuthority(authority)
                                                         .WithCertificate(cert)
                                                         .Build();

                    var serviceBusAudience = new Uri(ServiceBusAudience);

                    var authResult = await app.AcquireTokenForClient(new string[] { $"{serviceBusAudience}/.default" }).ExecuteAsync();
                    return(authResult.AccessToken);
                }, auth);

                return(tokenProvider);
            }
            else
            {
                return(TokenProvider.CreateManagedIdentityTokenProvider());
            }
        }
Exemple #2
0
        private ITokenProvider CreateTokenProvider(string clientId, string clientSecret, string tenantId)
        {
            return(TokenProvider.CreateAzureActiveDirectoryTokenProvider(async(audience, authority, state) =>
            {
                IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(clientId)
                                                     .WithAuthority(authority)
                                                     .WithClientSecret(clientSecret)
                                                     .Build();

                var serviceBusAudience = new Uri("https://servicebus.azure.net");

                var authResult = await app.AcquireTokenForClient(new string[] { $"{serviceBusAudience}/.default" }).ExecuteAsync();
                return authResult.AccessToken;
            }, $"https://login.windows.net/{tenantId}"));
        }
Exemple #3
0
        static TokenProvider GetAadTokenProvider(string clientId, string tenantId, string clientSecret)
        {
            return(TokenProvider.CreateAzureActiveDirectoryTokenProvider(
                       async(audience, authority, state) =>
            {
                IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(clientId)
                                                     .WithAuthority(authority)
                                                     .WithClientSecret(clientSecret)
                                                     .Build();

                var authResult = await app.AcquireTokenForClient(new [] { $"{audience}/.default" }).ExecuteAsync();
                return authResult.AccessToken;
            },
                       $"https://login.microsoftonline.com/{tenantId}"));
        }
        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();
                }
            }
        }
        async Task ClientCredentialsScenario()
        {
            var aadTokenProvider = 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 qClient = new QueueClient(new Uri($"sb://{ServiceBusNamespace}/").ToString(), QueueName, aadTokenProvider);

            await SendReceiveAsync(qClient);
        }
        async Task UserInteractiveLoginScenario()
        {
            var aadTokenProvider = TokenProvider.CreateAzureActiveDirectoryTokenProvider(async(audience, authority, state) =>
            {
                var app = PublicClientApplicationBuilder.Create(ClientId)
                          .WithRedirectUri(ConfigurationManager.AppSettings["redirectURI"])
                          .Build();

                var authResult = await app.AcquireTokenInteractive(new string[] { $"{audience}/.default" }).ExecuteAsync();

                return(authResult.AccessToken);
            }, $"https://login.windows.net/{TenantId}");

            var qc = new QueueClient(new Uri($"sb://{ServiceBusNamespace}/").ToString(), QueueName, aadTokenProvider);

            await SendReceiveAsync(qc);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        public async Task AzureActiveDirectoryTokenProviderAuthCallbackTest()
        {
            string TestToken          = @"eyJhbGciOiJIUzI1NiJ9.e30.ZRrHA1JJJW8opsbCGfG_HACGpVUMN_a9IV7pAx_Zmeo";
            string ServiceBusAudience = "https://servicebus.azure.net";

            var aadTokenProvider = TokenProvider.CreateAzureActiveDirectoryTokenProvider(
                (audience, authority, state) =>
            {
                Assert.Equal(ServiceBusAudience, audience);
                return(Task.FromResult(TestToken));
            },
                "https://servicebus.azure.net/MyTenantId");

            var token = await aadTokenProvider.GetTokenAsync(ServiceBusAudience, TimeSpan.FromSeconds(60));

            Assert.Equal(TestToken, token.TokenValue);
            Assert.Equal(typeof(JsonSecurityToken), token.GetType());
        }
        public static async Task Main(string[] args)
        {
            // Create token provider so that we can use it at both management and runtime clients.
            TokenProvider tokenProvider = TokenProvider.CreateAzureActiveDirectoryTokenProvider(
                async(audience, authority, state) =>
            {
                IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(ClientId)
                                                     .WithAuthority(authority)
                                                     .WithClientSecret(ClientSecret)
                                                     .Build();

                var authResult = await app.AcquireTokenForClient(new string[] { $"{audience}/.default" }).ExecuteAsync();
                return(authResult.AccessToken);
            },
                ServiceAudience.EventHubsAudience,
                $"https://login.microsoftonline.com/{TenantId}");

            var eventHubName = "testeh-" + Guid.NewGuid().ToString();

            // Create NamespaceManger and EventHubClient with Azure Active Directory token provider.
            var ehUri            = new Uri($"sb://{EventHubNamespace}/");
            var namespaceManager = new NamespaceManager(ehUri, tokenProvider);
            var messagingFactory = MessagingFactory.Create(ehUri,
                                                           new MessagingFactorySettings()
            {
                TokenProvider = tokenProvider,
                TransportType = TransportType.Amqp
            });
            var ehClient = messagingFactory.CreateEventHubClient(eventHubName);

            // Create a new event hub.
            Console.WriteLine($"Creating event hub {eventHubName}");
            await namespaceManager.CreateEventHubAsync(eventHubName);

            // Send and receive a message.
            await SendReceiveAsync(ehClient);

            // Delete event hub.
            Console.WriteLine($"Deleting event hub {eventHubName}");
            await namespaceManager.DeleteEventHubAsync(eventHubName);

            Console.WriteLine("Press enter to exit");
            Console.ReadLine();
        }
        public async Task AzureActiveDirectoryTokenProviderAuthCallbackTest()
        {
            var    csb       = new ServiceBusConnectionStringBuilder(TestUtility.NamespaceConnectionString);
            string TestToken = @"eyJhbGciOiJIUzI1NiJ9.e30.ZRrHA1JJJW8opsbCGfG_HACGpVUMN_a9IV7pAx_Zmeo";

            var aadTokenProvider = TokenProvider.CreateAzureActiveDirectoryTokenProvider(
                (audience, authority, state) =>
            {
                Assert.Equal(Constants.AadServiceBusAudience, audience);
                return(Task.FromResult(TestToken));
            },
                "https://servicebus.azure.net/MyTenantId");

            var token = await aadTokenProvider.GetTokenAsync(csb.Endpoint, TimeSpan.FromSeconds(60));

            Assert.Equal(typeof(JsonSecurityToken), token.GetType());
            Assert.Equal(TestToken, token.TokenValue);
            Assert.Equal(csb.Endpoint, token.Audience);
        }
        async Task ClientCredentialsScenario()
        {
            TokenProvider aadTokenProvider = TokenProvider.CreateAzureActiveDirectoryTokenProvider
                                                 (async(audience, authority, state) =>
            {
                IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(ClientId)
                                                     .WithAuthority(authority)
                                                     .WithClientSecret(ConfigurationManager.AppSettings["clientSecret"])
                                                     .Build();

                var serviceBusAudience = new Uri("https://servicebus.azure.net");

                AuthenticationResult authResult = await app.AcquireTokenForClient(new string[] { $"{serviceBusAudience}/.default" }).ExecuteAsync();
                return(authResult.AccessToken);
            }, $"https://login.windows.net/{TenantId}");

            var qc = new QueueClient(new Uri($"sb://{ServiceBusNamespace}/").ToString(), QueueName, aadTokenProvider);

            await SendReceiveAsync(qc);
        }
        async Task ClientCredentialsCertScenario()
        {
            X509Certificate2 certificate = GetCertificate();

            var aadTokenProvider = TokenProvider.CreateAzureActiveDirectoryTokenProvider(async(audience, authority, state) =>
            {
                IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(ClientId)
                                                     .WithAuthority(authority)
                                                     .WithCertificate(certificate)
                                                     .Build();
                Uri ServiceBusAudience = new Uri("https://servicebus.azure.net");

                var authResult = await app.AcquireTokenForClient(new string[] { $"{ServiceBusAudience}/.default" }).ExecuteAsync();
                return(authResult.AccessToken);
            });

            var qc = new QueueClient(new Uri($"sb://{ServiceBusNamespace}/").ToString(), QueueName, aadTokenProvider);

            await SendReceiveAsync(qc);
        }
Exemple #13
0
        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);
        }
        public static async Task Main(string[] args)
        {
            // Use the same identity client for both Event Hubs and Storage
            tokenClient = ConfidentialClientApplicationBuilder.Create(ClientId)
                          .WithAuthority(Authority)
                          .WithClientSecret(ClientSecret)
                          .Build();

            // Create Storage client with access token provider
            var tokenAndFrequency = await TokenRenewerAsync(tokenClient, CancellationToken.None);

            var tokenCredential = new TokenCredential(tokenAndFrequency.Token,
                                                      TokenRenewerAsync,
                                                      tokenClient,
                                                      tokenAndFrequency.Frequency.Value);
            var storageCredentials = new StorageCredentials(tokenCredential);
            CloudStorageAccount cloudStorageAccount = new CloudStorageAccount(storageCredentials, StorageAccountName, string.Empty, true);

            // Create Event Hubs access token provider and processor host
            TokenProvider tp = TokenProvider.CreateAzureActiveDirectoryTokenProvider(
                new AzureActiveDirectoryTokenProvider.AuthenticationCallback(GetAccessTokenAsync), Authority, tokenClient);
            var eventProcessorHost = new EventProcessorHost(
                new Uri(EventHubNamespace),
                EventHubName,
                PartitionReceiver.DefaultConsumerGroupName,
                tp,
                cloudStorageAccount,
                StorageContainerName);

            // Registers the Event Processor Host and starts receiving messages
            Console.WriteLine("Registering EventProcessor...");
            await eventProcessorHost.RegisterEventProcessorAsync <SimpleEventProcessor>();

            Console.WriteLine("Receiving. Press enter key to stop worker.");
            Console.ReadLine();

            // Disposes of the Event Processor Host
            await eventProcessorHost.UnregisterEventProcessorAsync();
        }