public async Task UsesTokenProvidedByCredentials()
        {
            var credentialsMock = new Mock <TokenCredential>();

            if (IsAsync)
            {
                credentialsMock.Setup(
                    credential => credential.GetTokenAsync(
                        It.Is <TokenRequest>(request => request.Scopes.SequenceEqual(new[] { "scope1", "scope2" })),
                        It.IsAny <CancellationToken>()))
                .ReturnsAsync(new AccessToken("token", DateTimeOffset.MaxValue));
            }
            else
            {
                credentialsMock.Setup(
                    credential => credential.GetToken(
                        It.Is <TokenRequest>(request => request.Scopes.SequenceEqual(new[] { "scope1", "scope2" })),
                        It.IsAny <CancellationToken>()))
                .Returns(new AccessToken("token", DateTimeOffset.MaxValue));
            }

            var           policy    = new BearerTokenAuthenticationPolicy(credentialsMock.Object, new[] { "scope1", "scope2" });
            MockTransport transport = CreateMockTransport(new MockResponse(200));

            await SendGetRequest(transport, policy);

            Assert.True(transport.SingleRequest.Headers.TryGetValue("Authorization", out string authValue));
            Assert.AreEqual("Bearer token", authValue);
        }
Beispiel #2
0
        public static HttpPipeline BuildPhoneNumbersHttpPipeline(this ClientOptions options, TokenCredential tokenCredential)
        {
            var authPolicy        = new BearerTokenAuthenticationPolicy(tokenCredential, "https://communication.azure.com//.default");
            var msUserAgentPolicy = new MSUserAgentPolicy();

            return(HttpPipelineBuilder.Build(options, authPolicy, msUserAgentPolicy));
        }
        /// <summary> Initializes a new instance of ConfidentialLedgerClient. </summary>
        /// <param name="ledgerUri"> The Confidential Ledger URL, for example https://contoso.confidentialledger.azure.com. </param>
        /// <param name="credential"> A credential used to authenticate to an Azure Service. </param>
        /// <param name="options"> The options for configuring the client. </param>
        public ConfidentialLedgerClient(Uri ledgerUri, TokenCredential credential, ConfidentialLedgerClientOptions options = null)
        {
            if (ledgerUri == null)
            {
                throw new ArgumentNullException(nameof(ledgerUri));
            }
            if (credential == null)
            {
                throw new ArgumentNullException(nameof(credential));
            }

            var actualOptions    = options ?? new ConfidentialLedgerClientOptions();
            var transportOptions = GetIdentityServerTlsCertAndTrust(ledgerUri, actualOptions);

            ClientDiagnostics = new ClientDiagnostics(actualOptions, true);
            _tokenCredential  = credential;
            var authPolicy = new BearerTokenAuthenticationPolicy(_tokenCredential, AuthorizationScopes);

            _pipeline = HttpPipelineBuilder.Build(
                actualOptions,
                Array.Empty <HttpPipelinePolicy>(),
                new HttpPipelinePolicy[] { authPolicy },
                transportOptions,
                new ResponseClassifier());
            _ledgerUri  = ledgerUri;
            _apiVersion = actualOptions.Version;
        }
Beispiel #4
0
        public async Task CachesHeaderValue()
        {
            var credentialsMock = new Mock <TokenCredential>();

            if (IsAsync)
            {
                credentialsMock.Setup(
                    credential => credential.GetTokenAsync(
                        It.Is <TokenRequestContext>(request => request.Scopes.SequenceEqual(new[] { "scope" })),
                        It.IsAny <CancellationToken>()))
                .ReturnsAsync(new AccessToken("token", DateTimeOffset.MaxValue));
            }
            else
            {
                credentialsMock.Setup(
                    credential => credential.GetToken(
                        It.Is <TokenRequestContext>(request => request.Scopes.SequenceEqual(new[] { "scope" })),
                        It.IsAny <CancellationToken>()))
                .Returns(new AccessToken("token", DateTimeOffset.MaxValue));
            }

            var           policy    = new BearerTokenAuthenticationPolicy(credentialsMock.Object, "scope");
            MockTransport transport = CreateMockTransport(new MockResponse(200), new MockResponse(200));

            await SendGetRequest(transport, policy, uri : new Uri("https://example.com"));
            await SendGetRequest(transport, policy, uri : new Uri("https://example.com"));

            Assert.True(transport.Requests[0].Headers.TryGetValue("Authorization", out string auth1Value));
            Assert.True(transport.Requests[1].Headers.TryGetValue("Authorization", out string auth2Value));

            Assert.AreSame(auth1Value, auth1Value);
            Assert.AreEqual("Bearer token", auth2Value);
        }
Beispiel #5
0
        public async Task CachesHeaderValue()
        {
            var credentialsMock = new Mock <TokenCredential>();

            if (IsAsync)
            {
                credentialsMock.Setup(
                    credential => credential.GetTokenAsync(
                        It.Is <string[]>(strings => strings.SequenceEqual(new[] { "scope" })),
                        It.IsAny <CancellationToken>()))
                .ReturnsAsync("token");
            }
            else
            {
                credentialsMock.Setup(
                    credential => credential.GetToken(
                        It.Is <string[]>(strings => strings.SequenceEqual(new[] { "scope" })),
                        It.IsAny <CancellationToken>()))
                .Returns("token");
            }

            var           policy    = new BearerTokenAuthenticationPolicy(credentialsMock.Object, "scope");
            MockTransport transport = CreateMockTransport(new MockResponse(200), new MockResponse(200));

            await SendGetRequest(transport, policy);
            await SendGetRequest(transport, policy);

            Assert.True(transport.Requests[0].Headers.TryGetValue("Authorization", out string auth1Value));
            Assert.True(transport.Requests[1].Headers.TryGetValue("Authorization", out string auth2Value));

            Assert.AreSame(auth1Value, auth1Value);
            Assert.AreEqual("Bearer token", auth2Value);
        }
Beispiel #6
0
        public void ThrowsForNonTlsEndpoint()
        {
            var credentialsMock = new Mock <TokenCredential>();

            if (IsAsync)
            {
                credentialsMock.Setup(
                    credential => credential.GetTokenAsync(
                        It.Is <TokenRequestContext>(request => request.Scopes.SequenceEqual(new[] { "scope" })),
                        It.IsAny <CancellationToken>()))
                .ReturnsAsync(new AccessToken("token", DateTimeOffset.MaxValue));
            }
            else
            {
                credentialsMock.Setup(
                    credential => credential.GetToken(
                        It.Is <TokenRequestContext>(request => request.Scopes.SequenceEqual(new[] { "scope" })),
                        It.IsAny <CancellationToken>()))
                .Returns(new AccessToken("token", DateTimeOffset.MaxValue));
            }

            var           policy    = new BearerTokenAuthenticationPolicy(credentialsMock.Object, "scope");
            MockTransport transport = CreateMockTransport();

            Assert.ThrowsAsync <InvalidOperationException>(async() => await SendGetRequest(transport, policy, uri: new Uri("http://example.com")));
        }
Beispiel #7
0
        /// <summary> Initializes a new instance of ConfidentialLedgerClient. </summary>
        /// <param name="ledgerUri"> The Confidential Ledger URL, for example https://contoso.confidentialledger.azure.com. </param>
        /// <param name="credential"> A credential used to authenticate to an Azure Service. </param>
        /// <param name="options"> The options for configuring the client. </param>
        public ConfidentialLedgerClient(Uri ledgerUri, TokenCredential credential, ConfidentialLedgerClientOptions options = null)
        {
            if (ledgerUri == null)
            {
                throw new ArgumentNullException(nameof(ledgerUri));
            }
            if (credential == null)
            {
                throw new ArgumentNullException(nameof(credential));
            }

            options ??= new ConfidentialLedgerClientOptions();
            _clientDiagnostics = new ClientDiagnostics(options);
            clientDiagnostics  = _clientDiagnostics;
            _tokenCredential   = credential;
            var authPolicy = new BearerTokenAuthenticationPolicy(_tokenCredential, AuthorizationScopes);

            _pipeline = HttpPipelineBuilder.Build(
                options,
                new HttpPipelinePolicy[] { new LowLevelCallbackPolicy() },
                new HttpPipelinePolicy[] { authPolicy },
                new ResponseClassifier());
            _ledgerUri             = ledgerUri;
            _apiVersion            = options.Version;
            DefaultPollingInterval = options.OperationPollingInterval;
        }
        private static HttpPipeline CreatePipelineFromOptions(ChatClientOptions options, CommunicationTokenCredential communicationTokenCredential)
        {
            var bearerTokenCredential = new CommunicationBearerTokenCredential(communicationTokenCredential);
            var authenticationPolicy  = new BearerTokenAuthenticationPolicy(bearerTokenCredential, "");

            return(HttpPipelineBuilder.Build(options, authenticationPolicy));
        }
        public PurviewDataSourceClient(Uri endpoint, string dataSourceName, TokenCredential credential, PurviewScanningServiceClientOptions options = null)
        {
            if (endpoint == null)
            {
                throw new ArgumentNullException(nameof(endpoint));
            }
            if (dataSourceName == null)
            {
                throw new ArgumentNullException(nameof(dataSourceName));
            }
            if (credential == null)
            {
                throw new ArgumentNullException(nameof(credential));
            }

            options ??= new PurviewScanningServiceClientOptions();
            _clientDiagnostics = new ClientDiagnostics(options);
            _tokenCredential   = credential;
            var authPolicy = new BearerTokenAuthenticationPolicy(_tokenCredential, AuthorizationScopes);

            Pipeline            = HttpPipelineBuilder.Build(options, new HttpPipelinePolicy[] { new LowLevelCallbackPolicy() }, new HttpPipelinePolicy[] { authPolicy }, new ResponseClassifier());
            this.endpoint       = endpoint;
            this.dataSourceName = dataSourceName;
            apiVersion          = options.Version;
        }
Beispiel #10
0
        public async Task FailingAccessTokenBackgroundRefreshProducesEvents()
        {
            var credentialMre = new ManualResetEventSlim(true);

            var currentTime = DateTimeOffset.UtcNow;
            var callCount   = 0;
            var exception   = new InvalidOperationException();

            var credential = new TokenCredentialStub((r, c) =>
            {
                callCount++;
                credentialMre.Set();
                return(callCount == 1 ? new AccessToken(Guid.NewGuid().ToString(), currentTime.AddMinutes(2)) : throw exception);
            }, IsAsync);

            var           policy        = new BearerTokenAuthenticationPolicy(credential, "scope");
            MockTransport mockTransport = CreateMockTransport(r =>
            {
                credentialMre.Wait();
                return(new MockResponse(200));
            });

            var pipeline = new HttpPipeline(mockTransport, new HttpPipelinePolicy[] { policy, new LoggingPolicy(logContent: true, int.MaxValue, s_allowedHeaders, s_allowedQueryParameters, "Test-SDK") });

            await SendRequestAsync(pipeline, request =>
            {
                request.Method = RequestMethod.Get;
                request.Uri.Reset(new Uri("https://example.com/1"));
                request.Headers.Add("User-Agent", "agent");
            });

            credentialMre.Reset();
            string requestId = null;

            await SendRequestAsync(pipeline, request =>
            {
                request.Method = RequestMethod.Get;
                request.Uri.Reset(new Uri("https://example.com/2"));
                request.Headers.Add("User-Agent", "agent");
                requestId = request.ClientRequestId;
            });

            await Task.Delay(1_000);

            EventWrittenEventArgs e = _listener.SingleEventById(BackgroundRefreshFailedEvent);

            Assert.AreEqual(EventLevel.Informational, e.Level);
            Assert.AreEqual(requestId, e.GetProperty <string>("requestId"));
            Assert.AreEqual(exception.ToString().Split(Environment.NewLine.ToCharArray())[0], e.GetProperty <string>("exception").Split(Environment.NewLine.ToCharArray())[0]);
        }
Beispiel #11
0
        public PurviewCatalogClient(Uri endpoint, TokenCredential credential, PurviewCatalogClientOptions options = null)
        {
            if (endpoint == null)
            {
                throw new ArgumentNullException(nameof(endpoint));
            }
            if (credential == null)
            {
                throw new ArgumentNullException(nameof(credential));
            }

            options ??= new PurviewCatalogClientOptions();
            _clientDiagnostics = new ClientDiagnostics(options);
            var authPolicy = new BearerTokenAuthenticationPolicy(credential, AuthorizationScopes);

            Pipeline      = HttpPipelineBuilder.Build(options, new HttpPipelinePolicy[] { authPolicy, new LowLevelCallbackPolicy() });
            this.endpoint = endpoint;
            apiVersion    = options.Version;
        }
Beispiel #12
0
        public ConfidentialLedgerIdentityServiceClient(Uri identityServiceUri, TokenCredential credential, ConfidentialLedgerClientOptions options = null)
        {
            if (identityServiceUri == null)
            {
                throw new ArgumentNullException(nameof(identityServiceUri));
            }
            if (credential == null)
            {
                throw new ArgumentNullException(nameof(credential));
            }

            options ??= new ConfidentialLedgerClientOptions();
            _clientDiagnostics = new ClientDiagnostics(options);
            var authPolicy = new BearerTokenAuthenticationPolicy(credential, AuthorizationScopes);

            Pipeline = HttpPipelineBuilder.Build(options, new HttpPipelinePolicy[] { authPolicy, new LowLevelCallbackPolicy() });
            this.identityServiceUri = identityServiceUri;
            apiVersion = options.Version;
        }
Beispiel #13
0
        public ImageProcessingClient(Uri endpoint, TokenCredential credential, FarmBeatsClientOptions options = null)
        {
            if (endpoint == null)
            {
                throw new ArgumentNullException(nameof(endpoint));
            }
            if (credential == null)
            {
                throw new ArgumentNullException(nameof(credential));
            }

            options ??= new FarmBeatsClientOptions();
            _clientDiagnostics = new ClientDiagnostics(options);
            _tokenCredential   = credential;
            var authPolicy = new BearerTokenAuthenticationPolicy(_tokenCredential, AuthorizationScopes);

            Pipeline      = HttpPipelineBuilder.Build(options, new HttpPipelinePolicy[] { new LowLevelCallbackPolicy() }, new HttpPipelinePolicy[] { authPolicy }, new ResponseClassifier());
            this.endpoint = endpoint;
            apiVersion    = options.Version;
        }
        public PetStoreClient(Uri endpoint, TokenCredential credential, PetStoreClientOptions options = null)
        {
            if (endpoint == null)
            {
                throw new ArgumentNullException(nameof(endpoint));
            }
            if (credential == null)
            {
                throw new ArgumentNullException(nameof(credential));
            }

            options ??= new PetStoreClientOptions();
            _clientDiagnostics = new ClientDiagnostics(options);
            _tokenCredential   = credential;
            var authPolicy = new BearerTokenAuthenticationPolicy(_tokenCredential, AuthorizationScopes);

            Pipeline      = HttpPipelineBuilder.Build(options, Array.Empty <HttpPipelinePolicy>(), new HttpPipelinePolicy[] { authPolicy }, null);
            this.endpoint = endpoint;
            apiVersion    = options.Version;
        }
        public PetStoreClient(Uri endpoint, TokenCredential credential, PetStoreClientOptions options = null)
        {
            if (endpoint == null)
            {
                throw new ArgumentNullException(nameof(endpoint));
            }
            if (credential == null)
            {
                throw new ArgumentNullException(nameof(credential));
            }

            options ??= new PetStoreClientOptions();
            _clientDiagnostics = new ClientDiagnostics(options);
            _tokenCredential   = credential;
            var authPolicy = new BearerTokenAuthenticationPolicy(_tokenCredential, AuthorizationScopes);

            // TODO: When we move the IsError functionality into Core, we'll move the addition of ResponsePropertiesPolicy to the pipeline into HttpPipelineBuilder.
            Pipeline      = HttpPipelineBuilder.Build(options, new HttpPipelinePolicy[] { new LowLevelCallbackPolicy() }, new HttpPipelinePolicy[] { authPolicy, new ResponsePropertiesPolicy(options) }, new ResponseClassifier());
            this.endpoint = endpoint;
            apiVersion    = options.Version;
        }
Beispiel #16
0
        /// <summary>
        /// Initializes a new instance of the <see cref="QuantumJobClient"/> class.
        /// </summary>
        /// <param name="subscriptionId">The subscription identifier.</param>
        /// <param name="resourceGroupName">Name of the resource group.</param>
        /// <param name="workspaceName">Name of the workspace.</param>
        /// <param name="location">The location.</param>
        /// <param name="credential">The token credential.</param>
        /// <param name="options">The options.</param>
        public QuantumJobClient(
            string subscriptionId,
            string resourceGroupName,
            string workspaceName,
            string location,
            TokenCredential credential      = default,
            QuantumJobClientOptions options = default)
        {
            if (options == null)
            {
                options = new QuantumJobClientOptions();
            }

            var authPolicy  = new BearerTokenAuthenticationPolicy(credential, "https://quantum.microsoft.com");
            var diagnostics = new ClientDiagnostics(options);
            var pipeline    = HttpPipelineBuilder.Build(options, authPolicy);
            var endpoint    = new Uri($"https://{location}.quantum.azure.com");

            _jobs      = new JobsRestClient(diagnostics, pipeline, subscriptionId, resourceGroupName, workspaceName, endpoint);
            _providers = new ProvidersRestClient(diagnostics, pipeline, subscriptionId, resourceGroupName, workspaceName, endpoint);
            _quotas    = new QuotasRestClient(diagnostics, pipeline, subscriptionId, resourceGroupName, workspaceName, endpoint);
            _storage   = new StorageRestClient(diagnostics, pipeline, subscriptionId, resourceGroupName, workspaceName, endpoint);
        }
        public async Task RequestsTokenEveryRequest()
        {
            AccessToken currentToken    = new AccessToken(null, default);
            var         credentialsMock = new Mock <TokenCredential>();

            if (IsAsync)
            {
                credentialsMock.Setup(
                    credential => credential.GetTokenAsync(
                        It.Is <TokenRequest>(request => request.Scopes.SequenceEqual(new[] { "scope1", "scope2" })),
                        It.IsAny <CancellationToken>()))
                .ReturnsAsync(() => currentToken);
            }
            else
            {
                credentialsMock.Setup(
                    credential => credential.GetToken(
                        It.Is <TokenRequest>(request => request.Scopes.SequenceEqual(new[] { "scope1", "scope2" })),
                        It.IsAny <CancellationToken>()))
                .Returns(() => currentToken);
            }

            var           policy    = new BearerTokenAuthenticationPolicy(credentialsMock.Object, new[] { "scope1", "scope2" });
            MockTransport transport = CreateMockTransport(new MockResponse(200), new MockResponse(200));

            currentToken = new AccessToken("token1", DateTimeOffset.UtcNow);
            await SendGetRequest(transport, policy);

            currentToken = new AccessToken("token2", DateTimeOffset.UtcNow);
            await SendGetRequest(transport, policy);

            Assert.True(transport.Requests[0].Headers.TryGetValue("Authorization", out string auth1Value));
            Assert.True(transport.Requests[1].Headers.TryGetValue("Authorization", out string auth2Value));

            Assert.AreEqual("Bearer token1", auth1Value);
            Assert.AreEqual("Bearer token2", auth2Value);
        }