diff --git a/src/Microsoft.Identity.Web.TokenAcquisition/TokenAcquisition.cs b/src/Microsoft.Identity.Web.TokenAcquisition/TokenAcquisition.cs index 71c27e424..3fb225015 100644 --- a/src/Microsoft.Identity.Web.TokenAcquisition/TokenAcquisition.cs +++ b/src/Microsoft.Identity.Web.TokenAcquisition/TokenAcquisition.cs @@ -196,9 +196,16 @@ public async Task AddAccountToCacheFromAuthorizationCodeAsyn } } + + /// + /// Allows creation of confidential client applications targeting regional and global authorities + /// when supporting managed identities. + /// + /// Merged configuration options + /// Concatenated string of authority, cliend id and azure region private static string GetApplicationKey(MergedOptions mergedOptions) { - return mergedOptions.Instance! + mergedOptions.ClientId; + return DefaultTokenAcquirerFactoryImplementation.GetKey(mergedOptions.Authority, mergedOptions.ClientId, mergedOptions.AzureRegion); } /// diff --git a/tests/Microsoft.Identity.Web.Test/TokenAcquisitionAuthorityTests.cs b/tests/Microsoft.Identity.Web.Test/TokenAcquisitionAuthorityTests.cs index 3c3204349..8f98b093e 100644 --- a/tests/Microsoft.Identity.Web.Test/TokenAcquisitionAuthorityTests.cs +++ b/tests/Microsoft.Identity.Web.Test/TokenAcquisitionAuthorityTests.cs @@ -177,6 +177,41 @@ public async Task VerifyCorrectRedirectUriAsync( } } + [Fact] + public async Task VerifyDifferentRegionsDifferentApp() + { + _microsoftIdentityOptionsMonitor = new TestOptionsMonitor(new MicrosoftIdentityOptions + { + Authority = TC.AuthorityCommonTenant, + ClientId = TC.ConfidentialClientId, + CallbackPath = string.Empty, + }); + + _applicationOptionsMonitor = new TestOptionsMonitor(new ConfidentialClientApplicationOptions + { + Instance = TC.AadInstance, + RedirectUri = "http://localhost:1729/", + ClientSecret = TC.ClientSecret, + }); + + BuildTheRequiredServices(); + MergedOptions mergedOptions = _provider.GetRequiredService().Get(OpenIdConnectDefaults.AuthenticationScheme); + MergedOptions.UpdateMergedOptionsFromMicrosoftIdentityOptions(_microsoftIdentityOptionsMonitor.Get(OpenIdConnectDefaults.AuthenticationScheme), mergedOptions); + MergedOptions.UpdateMergedOptionsFromConfidentialClientApplicationOptions(_applicationOptionsMonitor.Get(OpenIdConnectDefaults.AuthenticationScheme), mergedOptions); + + InitializeTokenAcquisitionObjects(); + + mergedOptions.AzureRegion = "UKEast"; + + IConfidentialClientApplication appEast = await _tokenAcquisition.GetOrBuildConfidentialClientApplicationAsync(mergedOptions); + + mergedOptions.AzureRegion = "UKWest"; + + IConfidentialClientApplication appWest = await _tokenAcquisition.GetOrBuildConfidentialClientApplicationAsync(mergedOptions); + + Assert.NotSame(appEast, appWest); + } + [Theory] [InlineData(true)] [InlineData(false)]