From d3ab99990bf6e3774c32fba13e16ec140b2cbf6d Mon Sep 17 00:00:00 2001 From: Gladwin Johnson Date: Thu, 14 Aug 2025 15:00:29 -0700 Subject: [PATCH 1/4] init --- .../PublicApiTests/ExtraHttpHeadersTests.cs | 165 ++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 tests/Microsoft.Identity.Test.Unit/PublicApiTests/ExtraHttpHeadersTests.cs diff --git a/tests/Microsoft.Identity.Test.Unit/PublicApiTests/ExtraHttpHeadersTests.cs b/tests/Microsoft.Identity.Test.Unit/PublicApiTests/ExtraHttpHeadersTests.cs new file mode 100644 index 0000000000..6bcae9c7f1 --- /dev/null +++ b/tests/Microsoft.Identity.Test.Unit/PublicApiTests/ExtraHttpHeadersTests.cs @@ -0,0 +1,165 @@ +// Copyright (c) Microsoft. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Threading.Tasks; +using Microsoft.Identity.Client; +using Microsoft.Identity.Client.Advanced; +using Microsoft.Identity.Test.Common.Core.Helpers; +using Microsoft.Identity.Test.Common.Core.Mocks; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace Microsoft.Identity.Test.Unit.PublicApiTests +{ + [TestClass] + public class ExtraHttpHeadersTests : TestBase + { + private readonly string _clientId = "4df2cbbb-8612-49c1-87c8-f334d6d065ad"; + private readonly string _scope = "api://msaltokenexchange/.default"; + private readonly string _tenantId = "tenantid"; + + private static bool TryGetHeader(HttpRequestMessage req, string name, out string value) + { + if (req.Headers.TryGetValues(name, out var v) && v != null) + { + value = v.Single(); + return true; + } + + if (req.Content?.Headers != null && + req.Content.Headers.TryGetValues(name, out var v2) && + v2 != null) + { + value = v2.Single(); + return true; + } + + value = null; + return false; + } + + [TestMethod] + public async Task AcquireTokenForClient_WithExtraHttpHeaders_SendsHeaders_Async() + { + using var httpManager = new MockHttpManager(); + { + // 1) Instance discovery + httpManager.AddInstanceDiscoveryMockHandler(); + + // 2) Token endpoint + httpManager.AddMockHandler(new MockHttpMessageHandler + { + ExpectedMethod = HttpMethod.Post, + ResponseMessage = MockHelpers.CreateSuccessfulClientCredentialTokenResponseMessage(), + AdditionalRequestValidation = (HttpRequestMessage req) => + { + Assert.IsTrue(TryGetHeader(req, "x-ms-test", out var v1), "x-ms-test not present."); + Assert.AreEqual("abc", v1); + + Assert.IsTrue(TryGetHeader(req, "x-correlation-id", out var v2), "x-correlation-id not present."); + Assert.AreEqual("123", v2); + } + }); + + var app = ConfidentialClientApplicationBuilder + .Create(_clientId) + .WithAuthority("https://login.microsoftonline.com/", _tenantId) + .WithClientSecret("ClientSecret") + .WithHttpManager(httpManager) + .BuildConcrete(); + + var headers = new Dictionary + { + ["x-ms-test"] = "abc", + ["x-correlation-id"] = "123" + }; + + var result = await app.AcquireTokenForClient(new[] { _scope }) + .WithExtraHttpHeaders(headers) // <-- new API under test + .ExecuteAsync() + .ConfigureAwait(false); + + Assert.IsNotNull(result); + Assert.AreEqual(TokenSource.IdentityProvider, result.AuthenticationResultMetadata.TokenSource); + } + } + + [TestMethod] + public async Task AcquireTokenForClient_ListAllRequestHeaders_Async() + { + using var httpManager = new MockHttpManager(); + { + httpManager.AddInstanceDiscoveryMockHandler(); + + httpManager.AddMockHandler(new MockHttpMessageHandler + { + ExpectedMethod = HttpMethod.Post, + ResponseMessage = MockHelpers.CreateSuccessfulClientCredentialTokenResponseMessage(), + AdditionalRequestValidation = (HttpRequestMessage req) => + { + // 1) Dump everything to the test output (no assumptions) + foreach (var kv in EnumerateAllHeaders(req)) + { + TestContext.WriteLine($"{kv.Key}: {string.Join(", ", kv.Value)}"); + } + + // 2) (Optional) Assert a few stable MSAL defaults are present. + // Keep this list small to avoid flakiness across platforms. + AssertHeaderExists(req, "client-request-id"); + AssertHeaderExists(req, "return-client-request-id"); + AssertHeaderExists(req, "x-client-sku"); + AssertHeaderExists(req, "x-client-ver"); + AssertHeaderExists(req, "x-client-os"); + AssertHeaderExists(req, "Accept"); + AssertHeaderExists(req, "Content-Type"); + AssertHeaderExists(req, "x-ms-test"); + } + }); + + var app = ConfidentialClientApplicationBuilder + .Create(_clientId) + .WithAuthority("https://login.microsoftonline.com/", _tenantId) + .WithClientSecret("ClientSecret") + .WithHttpManager(httpManager) + .BuildConcrete(); + + // Include one custom header to prove user-provided + defaults both show up + var custom = new Dictionary + { + ["x-ms-test"] = "abc" + }; + + var result = await app.AcquireTokenForClient(new[] { _scope }) + .WithExtraHttpHeaders(custom) + .ExecuteAsync() + .ConfigureAwait(false); + + Assert.IsNotNull(result); + Assert.AreEqual(TokenSource.IdentityProvider, result.AuthenticationResultMetadata.TokenSource); + } + } + + private static IEnumerable>> EnumerateAllHeaders(HttpRequestMessage req) + { + foreach (var h in req.Headers) + yield return new KeyValuePair>(h.Key, h.Value); + + if (req.Content != null) + { + foreach (var h in req.Content.Headers) + yield return new KeyValuePair>(h.Key, h.Value); + } + } + + private static void AssertHeaderExists(HttpRequestMessage req, string name) + { + bool found = + (req.Headers.TryGetValues(name, out var v1) && v1 != null) || + (req.Content?.Headers?.TryGetValues(name, out var v2) ?? false); + + Assert.IsTrue(found, $"Expected header '{name}' not found."); + } + } +} From dd546315bce19c6d2d01f8e98eb1aa0b57a0b883 Mon Sep 17 00:00:00 2001 From: Gladwin Johnson Date: Thu, 14 Aug 2025 17:33:31 -0700 Subject: [PATCH 2/4] more tests --- .../PublicApiTests/ExtraHttpHeadersTests.cs | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/tests/Microsoft.Identity.Test.Unit/PublicApiTests/ExtraHttpHeadersTests.cs b/tests/Microsoft.Identity.Test.Unit/PublicApiTests/ExtraHttpHeadersTests.cs index 6bcae9c7f1..3086e75529 100644 --- a/tests/Microsoft.Identity.Test.Unit/PublicApiTests/ExtraHttpHeadersTests.cs +++ b/tests/Microsoft.Identity.Test.Unit/PublicApiTests/ExtraHttpHeadersTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft. // Licensed under the MIT License. +using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; @@ -141,6 +142,117 @@ public async Task AcquireTokenForClient_ListAllRequestHeaders_Async() } } + [TestMethod] + public async Task AcquireTokenForClient_WithExtraHttpHeaders_Null_DoesNotChangeHeaders_Async() + { + using var httpManager = new MockHttpManager(); + httpManager.AddInstanceDiscoveryMockHandler(); + + HashSet baseline = new(StringComparer.OrdinalIgnoreCase); + HashSet afterNull = new(StringComparer.OrdinalIgnoreCase); + + httpManager.AddMockHandler(new MockHttpMessageHandler + { + ExpectedMethod = HttpMethod.Post, + ResponseMessage = MockHelpers.CreateSuccessfulClientCredentialTokenResponseMessage(), + AdditionalRequestValidation = req => { foreach (var h in EnumerateAllHeaders(req)) baseline.Add(h.Key); } + }); + + var app1 = ConfidentialClientApplicationBuilder.Create(_clientId) + .WithAuthority("https://login.microsoftonline.com/", _tenantId) + .WithClientSecret("ClientSecret") + .WithHttpManager(httpManager) + .BuildConcrete(); + + await app1.AcquireTokenForClient(new[] { _scope }).ExecuteAsync().ConfigureAwait(false); + + httpManager.AddMockHandler(new MockHttpMessageHandler + { + ExpectedMethod = HttpMethod.Post, + ResponseMessage = MockHelpers.CreateSuccessfulClientCredentialTokenResponseMessage(), + AdditionalRequestValidation = req => { foreach (var h in EnumerateAllHeaders(req)) afterNull.Add(h.Key); } + }); + + var app2 = ConfidentialClientApplicationBuilder.Create(_clientId) + .WithAuthority("https://login.microsoftonline.com/", _tenantId) + .WithClientSecret("ClientSecret") + .WithHttpManager(httpManager) + .BuildConcrete(); + + Dictionary headers = null; + await app2.AcquireTokenForClient(new[] { _scope }) + .WithExtraHttpHeaders(headers) + .ExecuteAsync().ConfigureAwait(false); + + CollectionAssert.AreEquivalent(baseline.ToList(), afterNull.ToList(), + "Null headers should not change the header set."); + } + + [TestMethod] + public async Task AcquireTokenForClient_ExtraHeaders_OverridesDefault_Async() + { + using var httpManager = new MockHttpManager(); + httpManager.AddInstanceDiscoveryMockHandler(); + httpManager.AddMockHandler(new MockHttpMessageHandler + { + ExpectedMethod = HttpMethod.Post, + ResponseMessage = MockHelpers.CreateSuccessfulClientCredentialTokenResponseMessage(), + AdditionalRequestValidation = (HttpRequestMessage req) => + { + Assert.IsTrue(TryGetHeader(req, "Accept", out var v), "Accept not present"); + Assert.AreEqual("text/plain", v); // user value should win + } + }); + + var app = ConfidentialClientApplicationBuilder.Create(_clientId) + .WithAuthority("https://login.microsoftonline.com/", _tenantId) + .WithClientSecret("ClientSecret") + .WithHttpManager(httpManager) + .BuildConcrete(); + + var headers = new Dictionary { ["Accept"] = "text/plain" }; + var result = await app.AcquireTokenForClient(new[] { _scope }) + .WithExtraHttpHeaders(headers) + .ExecuteAsync().ConfigureAwait(false); + + Assert.IsNotNull(result); + } + + [TestMethod] + public async Task AcquireTokenForClient_MultipleWithExtraHttpHeaders_Calls_LastWins_Async() + { + using var httpManager = new MockHttpManager(); + httpManager.AddInstanceDiscoveryMockHandler(); + + httpManager.AddMockHandler(new MockHttpMessageHandler + { + ExpectedMethod = HttpMethod.Post, + ResponseMessage = MockHelpers.CreateSuccessfulClientCredentialTokenResponseMessage(), + AdditionalRequestValidation = (HttpRequestMessage req) => + { + // Only the last set of headers should be present + Assert.IsTrue(TryGetHeader(req, "x-ms-test", out var v1), "x-ms-test not present."); + Assert.AreEqual("final", v1); + Assert.IsFalse(TryGetHeader(req, "x-ms-old", out _), "x-ms-old should not be present."); + } + }); + + var app = ConfidentialClientApplicationBuilder + .Create(_clientId) + .WithAuthority("https://login.microsoftonline.com/", _tenantId) + .WithClientSecret("ClientSecret") + .WithHttpManager(httpManager) + .BuildConcrete(); + + var result = await app.AcquireTokenForClient(new[] { _scope }) + .WithExtraHttpHeaders(new Dictionary { ["x-ms-test"] = "initial", ["x-ms-old"] = "old" }) + .WithExtraHttpHeaders(new Dictionary { ["x-ms-test"] = "final" }) // last call should win + .ExecuteAsync() + .ConfigureAwait(false); + + Assert.IsNotNull(result); + } + private static IEnumerable>> EnumerateAllHeaders(HttpRequestMessage req) { foreach (var h in req.Headers) From 262eaa6d6103085c1d28950f6d60e2a10be53de3 Mon Sep 17 00:00:00 2001 From: Gladwin Johnson Date: Fri, 15 Aug 2025 07:57:49 -0700 Subject: [PATCH 3/4] new surface --- .../AcquireTokenParameterBuilderExtensions.cs | 23 +++++++++++++++++++ .../PublicApi/net462/PublicAPI.Unshipped.txt | 1 + .../PublicApi/net472/PublicAPI.Unshipped.txt | 1 + .../net8.0-android/PublicAPI.Unshipped.txt | 1 + .../net8.0-ios/PublicAPI.Unshipped.txt | 1 + .../PublicApi/net8.0/PublicAPI.Unshipped.txt | 1 + .../netstandard2.0/PublicAPI.Unshipped.txt | 1 + .../PublicApiTests/ExtraHttpHeadersTests.cs | 2 +- 8 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/client/Microsoft.Identity.Client/Extensibility/AcquireTokenParameterBuilderExtensions.cs b/src/client/Microsoft.Identity.Client/Extensibility/AcquireTokenParameterBuilderExtensions.cs index b8553cb8dc..6ebb46d3c6 100644 --- a/src/client/Microsoft.Identity.Client/Extensibility/AcquireTokenParameterBuilderExtensions.cs +++ b/src/client/Microsoft.Identity.Client/Extensibility/AcquireTokenParameterBuilderExtensions.cs @@ -26,3 +26,26 @@ public static T WithExtraHttpHeaders( } } } + +// Extensibility (new surface) +namespace Microsoft.Identity.Client.Extensibility +{ + /// + /// Extensibility helpers for acquire token parameter builders. + /// + public static class AcquireTokenParameterBuilderExtensions + { + /// Adds additional HTTP headers to the token request. + /// Parameter builder for acquiring tokens. + /// Additional HTTP headers to add to the token request. + public static T WithExtraHttpHeaders( + this AbstractAcquireTokenParameterBuilder builder, + IDictionary extraHttpHeaders) + where T : AbstractAcquireTokenParameterBuilder + { + // Delegate to the Advanced implementation to keep a single source of truth. + return Advanced.AcquireTokenParameterBuilderExtensions + .WithExtraHttpHeaders(builder, extraHttpHeaders); + } + } +} diff --git a/src/client/Microsoft.Identity.Client/PublicApi/net462/PublicAPI.Unshipped.txt b/src/client/Microsoft.Identity.Client/PublicApi/net462/PublicAPI.Unshipped.txt index e69de29bb2..5f0352f4e0 100644 --- a/src/client/Microsoft.Identity.Client/PublicApi/net462/PublicAPI.Unshipped.txt +++ b/src/client/Microsoft.Identity.Client/PublicApi/net462/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T \ No newline at end of file diff --git a/src/client/Microsoft.Identity.Client/PublicApi/net472/PublicAPI.Unshipped.txt b/src/client/Microsoft.Identity.Client/PublicApi/net472/PublicAPI.Unshipped.txt index e69de29bb2..5f0352f4e0 100644 --- a/src/client/Microsoft.Identity.Client/PublicApi/net472/PublicAPI.Unshipped.txt +++ b/src/client/Microsoft.Identity.Client/PublicApi/net472/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T \ No newline at end of file diff --git a/src/client/Microsoft.Identity.Client/PublicApi/net8.0-android/PublicAPI.Unshipped.txt b/src/client/Microsoft.Identity.Client/PublicApi/net8.0-android/PublicAPI.Unshipped.txt index e69de29bb2..5f0352f4e0 100644 --- a/src/client/Microsoft.Identity.Client/PublicApi/net8.0-android/PublicAPI.Unshipped.txt +++ b/src/client/Microsoft.Identity.Client/PublicApi/net8.0-android/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T \ No newline at end of file diff --git a/src/client/Microsoft.Identity.Client/PublicApi/net8.0-ios/PublicAPI.Unshipped.txt b/src/client/Microsoft.Identity.Client/PublicApi/net8.0-ios/PublicAPI.Unshipped.txt index e69de29bb2..5f0352f4e0 100644 --- a/src/client/Microsoft.Identity.Client/PublicApi/net8.0-ios/PublicAPI.Unshipped.txt +++ b/src/client/Microsoft.Identity.Client/PublicApi/net8.0-ios/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T \ No newline at end of file diff --git a/src/client/Microsoft.Identity.Client/PublicApi/net8.0/PublicAPI.Unshipped.txt b/src/client/Microsoft.Identity.Client/PublicApi/net8.0/PublicAPI.Unshipped.txt index e69de29bb2..5f0352f4e0 100644 --- a/src/client/Microsoft.Identity.Client/PublicApi/net8.0/PublicAPI.Unshipped.txt +++ b/src/client/Microsoft.Identity.Client/PublicApi/net8.0/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T \ No newline at end of file diff --git a/src/client/Microsoft.Identity.Client/PublicApi/netstandard2.0/PublicAPI.Unshipped.txt b/src/client/Microsoft.Identity.Client/PublicApi/netstandard2.0/PublicAPI.Unshipped.txt index e69de29bb2..5f0352f4e0 100644 --- a/src/client/Microsoft.Identity.Client/PublicApi/netstandard2.0/PublicAPI.Unshipped.txt +++ b/src/client/Microsoft.Identity.Client/PublicApi/netstandard2.0/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T \ No newline at end of file diff --git a/tests/Microsoft.Identity.Test.Unit/PublicApiTests/ExtraHttpHeadersTests.cs b/tests/Microsoft.Identity.Test.Unit/PublicApiTests/ExtraHttpHeadersTests.cs index 3086e75529..6dceabb3f4 100644 --- a/tests/Microsoft.Identity.Test.Unit/PublicApiTests/ExtraHttpHeadersTests.cs +++ b/tests/Microsoft.Identity.Test.Unit/PublicApiTests/ExtraHttpHeadersTests.cs @@ -7,7 +7,7 @@ using System.Net.Http; using System.Threading.Tasks; using Microsoft.Identity.Client; -using Microsoft.Identity.Client.Advanced; +using Microsoft.Identity.Client.Extensibility; using Microsoft.Identity.Test.Common.Core.Helpers; using Microsoft.Identity.Test.Common.Core.Mocks; using Microsoft.VisualStudio.TestTools.UnitTesting; From 5b8c77705aff1e23a554c9255ae135462d48dcde Mon Sep 17 00:00:00 2001 From: Gladwin Johnson <90415114+gladjohn@users.noreply.github.com> Date: Mon, 18 Aug 2025 19:54:17 -0700 Subject: [PATCH 4/4] fix --- .../Extensibility/AcquireTokenParameterBuilderExtensions.cs | 2 +- .../PublicApi/net462/PublicAPI.Unshipped.txt | 3 ++- .../PublicApi/net472/PublicAPI.Unshipped.txt | 3 ++- .../PublicApi/net8.0-android/PublicAPI.Unshipped.txt | 3 ++- .../PublicApi/net8.0-ios/PublicAPI.Unshipped.txt | 3 ++- .../PublicApi/net8.0/PublicAPI.Unshipped.txt | 3 ++- .../PublicApi/netstandard2.0/PublicAPI.Unshipped.txt | 3 ++- 7 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/client/Microsoft.Identity.Client/Extensibility/AcquireTokenParameterBuilderExtensions.cs b/src/client/Microsoft.Identity.Client/Extensibility/AcquireTokenParameterBuilderExtensions.cs index 6ebb46d3c6..198b135712 100644 --- a/src/client/Microsoft.Identity.Client/Extensibility/AcquireTokenParameterBuilderExtensions.cs +++ b/src/client/Microsoft.Identity.Client/Extensibility/AcquireTokenParameterBuilderExtensions.cs @@ -27,7 +27,7 @@ public static T WithExtraHttpHeaders( } } -// Extensibility (new surface) +// Extensibility (new surface for WithExtraHttpHeaders) namespace Microsoft.Identity.Client.Extensibility { /// diff --git a/src/client/Microsoft.Identity.Client/PublicApi/net462/PublicAPI.Unshipped.txt b/src/client/Microsoft.Identity.Client/PublicApi/net462/PublicAPI.Unshipped.txt index 5f0352f4e0..c28304c415 100644 --- a/src/client/Microsoft.Identity.Client/PublicApi/net462/PublicAPI.Unshipped.txt +++ b/src/client/Microsoft.Identity.Client/PublicApi/net462/PublicAPI.Unshipped.txt @@ -1 +1,2 @@ -static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T \ No newline at end of file +Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions +static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T diff --git a/src/client/Microsoft.Identity.Client/PublicApi/net472/PublicAPI.Unshipped.txt b/src/client/Microsoft.Identity.Client/PublicApi/net472/PublicAPI.Unshipped.txt index 5f0352f4e0..c28304c415 100644 --- a/src/client/Microsoft.Identity.Client/PublicApi/net472/PublicAPI.Unshipped.txt +++ b/src/client/Microsoft.Identity.Client/PublicApi/net472/PublicAPI.Unshipped.txt @@ -1 +1,2 @@ -static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T \ No newline at end of file +Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions +static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T diff --git a/src/client/Microsoft.Identity.Client/PublicApi/net8.0-android/PublicAPI.Unshipped.txt b/src/client/Microsoft.Identity.Client/PublicApi/net8.0-android/PublicAPI.Unshipped.txt index 5f0352f4e0..c28304c415 100644 --- a/src/client/Microsoft.Identity.Client/PublicApi/net8.0-android/PublicAPI.Unshipped.txt +++ b/src/client/Microsoft.Identity.Client/PublicApi/net8.0-android/PublicAPI.Unshipped.txt @@ -1 +1,2 @@ -static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T \ No newline at end of file +Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions +static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T diff --git a/src/client/Microsoft.Identity.Client/PublicApi/net8.0-ios/PublicAPI.Unshipped.txt b/src/client/Microsoft.Identity.Client/PublicApi/net8.0-ios/PublicAPI.Unshipped.txt index 5f0352f4e0..c28304c415 100644 --- a/src/client/Microsoft.Identity.Client/PublicApi/net8.0-ios/PublicAPI.Unshipped.txt +++ b/src/client/Microsoft.Identity.Client/PublicApi/net8.0-ios/PublicAPI.Unshipped.txt @@ -1 +1,2 @@ -static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T \ No newline at end of file +Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions +static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T diff --git a/src/client/Microsoft.Identity.Client/PublicApi/net8.0/PublicAPI.Unshipped.txt b/src/client/Microsoft.Identity.Client/PublicApi/net8.0/PublicAPI.Unshipped.txt index 5f0352f4e0..c28304c415 100644 --- a/src/client/Microsoft.Identity.Client/PublicApi/net8.0/PublicAPI.Unshipped.txt +++ b/src/client/Microsoft.Identity.Client/PublicApi/net8.0/PublicAPI.Unshipped.txt @@ -1 +1,2 @@ -static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T \ No newline at end of file +Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions +static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T diff --git a/src/client/Microsoft.Identity.Client/PublicApi/netstandard2.0/PublicAPI.Unshipped.txt b/src/client/Microsoft.Identity.Client/PublicApi/netstandard2.0/PublicAPI.Unshipped.txt index 5f0352f4e0..c28304c415 100644 --- a/src/client/Microsoft.Identity.Client/PublicApi/netstandard2.0/PublicAPI.Unshipped.txt +++ b/src/client/Microsoft.Identity.Client/PublicApi/netstandard2.0/PublicAPI.Unshipped.txt @@ -1 +1,2 @@ -static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T \ No newline at end of file +Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions +static Microsoft.Identity.Client.Extensibility.AcquireTokenParameterBuilderExtensions.WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) -> T