Skip to content

Commit 7535ecc

Browse files
keegan-carusoKeegan Carusojennyf19jmprieur
authored
Dont modify the merged options when building the confidential client (#3137)
* Dont modify the merged options when building the confidential client * Fix API files --------- Co-authored-by: Keegan Caruso <[email protected]> Co-authored-by: jennyf19 <[email protected]> Co-authored-by: Jean-Marc Prieur <[email protected]>
1 parent 455c687 commit 7535ecc

File tree

9 files changed

+29
-7
lines changed

9 files changed

+29
-7
lines changed

src/Microsoft.Identity.Web.TokenAcquisition/MergedOptions.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Collections.Generic;
66
using System.Linq;
77
using Microsoft.Identity.Abstractions;
8+
89
#if !NETSTANDARD2_0 && !NET462 && !NET472
910
using Microsoft.AspNetCore.Authentication.JwtBearer;
1011
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
@@ -53,6 +54,12 @@ public ConfidentialClientApplicationOptions ConfidentialClientApplicationOptions
5354
// This is for supporting for CIAM authorities including custom url domains, see https://github.com/AzureAD/microsoft-identity-web/issues/2690
5455
internal bool PreserveAuthority { get; set; }
5556

57+
/// <summary>
58+
/// Id Web will modify the instance so that it can be used by MSAL.
59+
/// This modifies this property so that the original value is not changed.
60+
/// </summary>
61+
internal string? PreparedInstance { get; set; }
62+
5663
internal static void UpdateMergedOptionsFromMicrosoftIdentityOptions(MicrosoftIdentityOptions microsoftIdentityOptions, MergedOptions mergedOptions)
5764
{
5865

@@ -466,14 +473,14 @@ public void PrepareAuthorityInstanceForMsal()
466473
if (IsB2C && Instance.EndsWith("/tfp/", StringComparison.OrdinalIgnoreCase))
467474
{
468475
#if !NETSTANDARD2_0 && !NET462 && !NET472
469-
Instance = Instance.Replace("/tfp/", string.Empty, StringComparison.OrdinalIgnoreCase).TrimEnd('/') + "/";
476+
PreparedInstance = Instance.Replace("/tfp/", string.Empty, StringComparison.OrdinalIgnoreCase).TrimEnd('/') + "/";
470477
#else
471-
Instance = Instance.Replace("/tfp/", string.Empty).TrimEnd('/') + "/";
478+
PreparedInstance = Instance.Replace("/tfp/", string.Empty).TrimEnd('/') + "/";
472479
#endif
473480
}
474481
else
475482
{
476-
Instance = Instance.TrimEnd('/') + "/";
483+
PreparedInstance = Instance.TrimEnd('/') + "/";
477484
}
478485
}
479486

src/Microsoft.Identity.Web.TokenAcquisition/PublicAPI/net462/InternalAPI.Unshipped.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#nullable enable
22
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.get -> string?
33
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.set -> void
4+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.get -> string?
5+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.set -> void
46
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForApp(Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions) -> void
57
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForTestUser(Microsoft.Identity.Client.AcquireTokenByUsernameAndPasswordConfidentialParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions, System.Security.Claims.ClaimsPrincipal! user) -> void
68
readonly Microsoft.Identity.Web.TokenAcquisition.tokenAcquisitionExtensionOptionsMonitor -> Microsoft.Extensions.Options.IOptionsMonitor<Microsoft.Identity.Web.TokenAcquisitionExtensionOptions!>?

src/Microsoft.Identity.Web.TokenAcquisition/PublicAPI/net472/InternalAPI.Unshipped.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#nullable enable
22
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.get -> string?
33
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.set -> void
4+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.get -> string?
5+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.set -> void
46
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForApp(Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions) -> void
57
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForTestUser(Microsoft.Identity.Client.AcquireTokenByUsernameAndPasswordConfidentialParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions, System.Security.Claims.ClaimsPrincipal! user) -> void
68
readonly Microsoft.Identity.Web.TokenAcquisition.tokenAcquisitionExtensionOptionsMonitor -> Microsoft.Extensions.Options.IOptionsMonitor<Microsoft.Identity.Web.TokenAcquisitionExtensionOptions!>?

src/Microsoft.Identity.Web.TokenAcquisition/PublicAPI/net6.0/InternalAPI.Unshipped.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#nullable enable
22
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.get -> string?
33
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.set -> void
4+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.get -> string?
5+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.set -> void
46
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForApp(Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions) -> void
57
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForTestUser(Microsoft.Identity.Client.AcquireTokenByUsernameAndPasswordConfidentialParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions, System.Security.Claims.ClaimsPrincipal! user) -> void
68
readonly Microsoft.Identity.Web.TokenAcquisition.tokenAcquisitionExtensionOptionsMonitor -> Microsoft.Extensions.Options.IOptionsMonitor<Microsoft.Identity.Web.TokenAcquisitionExtensionOptions!>?

src/Microsoft.Identity.Web.TokenAcquisition/PublicAPI/net7.0/InternalAPI.Unshipped.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#nullable enable
22
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.get -> string?
33
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.set -> void
4+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.get -> string?
5+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.set -> void
46
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForApp(Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions) -> void
57
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForTestUser(Microsoft.Identity.Client.AcquireTokenByUsernameAndPasswordConfidentialParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions, System.Security.Claims.ClaimsPrincipal! user) -> void
68
readonly Microsoft.Identity.Web.TokenAcquisition.tokenAcquisitionExtensionOptionsMonitor -> Microsoft.Extensions.Options.IOptionsMonitor<Microsoft.Identity.Web.TokenAcquisitionExtensionOptions!>?

src/Microsoft.Identity.Web.TokenAcquisition/PublicAPI/net8.0/InternalAPI.Unshipped.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#nullable enable
22
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.get -> string?
33
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.set -> void
4+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.get -> string?
5+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.set -> void
46
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForApp(Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions) -> void
57
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForTestUser(Microsoft.Identity.Client.AcquireTokenByUsernameAndPasswordConfidentialParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions, System.Security.Claims.ClaimsPrincipal! user) -> void
68
readonly Microsoft.Identity.Web.TokenAcquisition.tokenAcquisitionExtensionOptionsMonitor -> Microsoft.Extensions.Options.IOptionsMonitor<Microsoft.Identity.Web.TokenAcquisitionExtensionOptions!>?

src/Microsoft.Identity.Web.TokenAcquisition/PublicAPI/net9.0/InternalAPI.Unshipped.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#nullable enable
22
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.get -> string?
33
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.set -> void
4+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.get -> string?
5+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.set -> void
46
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForApp(Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions) -> void
57
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForTestUser(Microsoft.Identity.Client.AcquireTokenByUsernameAndPasswordConfidentialParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions, System.Security.Claims.ClaimsPrincipal! user) -> void
68
readonly Microsoft.Identity.Web.TokenAcquisition.tokenAcquisitionExtensionOptionsMonitor -> Microsoft.Extensions.Options.IOptionsMonitor<Microsoft.Identity.Web.TokenAcquisitionExtensionOptions!>?

src/Microsoft.Identity.Web.TokenAcquisition/PublicAPI/netstandard2.0/InternalAPI.Unshipped.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#nullable enable
22
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.get -> string?
33
Microsoft.Identity.Web.MergedOptions.AppHomeTenantId.set -> void
4+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.get -> string?
5+
Microsoft.Identity.Web.MergedOptions.PreparedInstance.set -> void
46
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForApp(Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions) -> void
57
Microsoft.Identity.Web.TokenAcquisitionExtensionOptions.InvokeOnBeforeTokenAcquisitionForTestUser(Microsoft.Identity.Client.AcquireTokenByUsernameAndPasswordConfidentialParameterBuilder! builder, Microsoft.Identity.Abstractions.AcquireTokenOptions? acquireTokenOptions, System.Security.Claims.ClaimsPrincipal! user) -> void
68
readonly Microsoft.Identity.Web.TokenAcquisition.tokenAcquisitionExtensionOptionsMonitor -> Microsoft.Extensions.Options.IOptionsMonitor<Microsoft.Identity.Web.TokenAcquisitionExtensionOptions!>?

src/Microsoft.Identity.Web.TokenAcquisition/TokenAcquisition.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ public async Task<AcquireTokenResult> AddAccountToCacheFromAuthorizationCodeAsyn
157157
if (mergedOptions.IsB2C)
158158
{
159159

160-
var authority = $"{mergedOptions.Instance}{ClaimConstants.Tfp}/{mergedOptions.Domain}/{authCodeRedemptionParameters.UserFlow ?? mergedOptions.DefaultUserFlow}";
160+
var authority = $"{mergedOptions.PreparedInstance}{ClaimConstants.Tfp}/{mergedOptions.Domain}/{authCodeRedemptionParameters.UserFlow ?? mergedOptions.DefaultUserFlow}";
161161
builder.WithB2CAuthority(authority);
162162
}
163163

@@ -754,7 +754,6 @@ private bool IsInvalidClientCertificateOrSignedAssertionError(MsalServiceExcepti
754754
/// </summary>
755755
private async Task<IConfidentialClientApplication> BuildConfidentialClientApplicationAsync(MergedOptions mergedOptions)
756756
{
757-
string? currentUri = _tokenAcquisitionHost.GetCurrentRedirectUri(mergedOptions);
758757
mergedOptions.PrepareAuthorityInstanceForMsal();
759758

760759
try
@@ -773,6 +772,8 @@ private async Task<IConfidentialClientApplication> BuildConfidentialClientApplic
773772
builder.WithCacheOptions(CacheOptions.EnableSharedCacheOptions);
774773
}
775774

775+
string? currentUri = _tokenAcquisitionHost.GetCurrentRedirectUri(mergedOptions);
776+
776777
// The redirect URI is not needed for OBO
777778
if (!string.IsNullOrEmpty(currentUri))
778779
{
@@ -788,12 +789,12 @@ private async Task<IConfidentialClientApplication> BuildConfidentialClientApplic
788789
}
789790
else if (mergedOptions.IsB2C)
790791
{
791-
authority = $"{mergedOptions.Instance}{ClaimConstants.Tfp}/{mergedOptions.Domain}/{mergedOptions.DefaultUserFlow}";
792+
authority = $"{mergedOptions.PreparedInstance}{ClaimConstants.Tfp}/{mergedOptions.Domain}/{mergedOptions.DefaultUserFlow}";
792793
builder.WithB2CAuthority(authority);
793794
}
794795
else
795796
{
796-
authority = $"{mergedOptions.Instance}{mergedOptions.TenantId}/";
797+
authority = $"{mergedOptions.PreparedInstance}{mergedOptions.TenantId}/";
797798
builder.WithAuthority(authority);
798799
}
799800

0 commit comments

Comments
 (0)