public async Task UserRegion_DiscoveryHappensOnce_Async() { using (var httpManager = new MockHttpManager()) { httpManager.AddRegionDiscoveryMockHandler(TestConstants.Region); httpManager.AddMockHandler(CreateTokenResponseHttpHandler(true)); IConfidentialClientApplication app = CreateCca( httpManager, TestConstants.Region); AuthenticationResult result = await app .AcquireTokenForClient(TestConstants.s_scope) .ExecuteAsync() .ConfigureAwait(false); Assert.AreEqual(TestConstants.Region, result.ApiEvent.RegionUsed); Assert.AreEqual((int)RegionAutodetectionSource.Imds, result.ApiEvent.RegionAutodetectionSource); Assert.AreEqual((int)RegionOutcome.UserProvidedValid, result.ApiEvent.RegionOutcome); Assert.IsTrue(result.AuthenticationResultMetadata.TokenSource == TokenSource.IdentityProvider); result = await app .AcquireTokenForClient(TestConstants.s_scope) .ExecuteAsync() .ConfigureAwait(false); Assert.IsTrue(result.AuthenticationResultMetadata.TokenSource == TokenSource.Cache); } }
public async Task TokensAreInterchangable_Regional_To_NonRegional_Async() { using (var httpManager = new MockHttpManager()) { httpManager.AddRegionDiscoveryMockHandler(TestConstants.Region); httpManager.AddMockHandler(CreateTokenResponseHttpHandler(true)); IConfidentialClientApplication appWithRegion = CreateCca( httpManager, ConfidentialClientApplication.AttemptRegionDiscovery); InMemoryTokenCache memoryTokenCache = new InMemoryTokenCache(); memoryTokenCache.Bind(appWithRegion.AppTokenCache); IConfidentialClientApplication appWithoutRegion = CreateCca( httpManager, null); memoryTokenCache.Bind(appWithoutRegion.AppTokenCache); AuthenticationResult result = await appWithRegion .AcquireTokenForClient(TestConstants.s_scope) .ExecuteAsync(CancellationToken.None) .ConfigureAwait(false); Assert.AreEqual(TestConstants.Region, result.ApiEvent.RegionUsed); Assert.AreEqual(TestConstants.Region, result.ApiEvent.AutoDetectedRegion); Assert.AreEqual(RegionAutodetectionSource.Imds, result.ApiEvent.RegionAutodetectionSource); Assert.AreEqual(RegionOutcome.AutodetectSuccess, result.ApiEvent.RegionOutcome); Assert.AreEqual(TestConstants.Region, result.AuthenticationResultMetadata.RegionDetails.RegionUsed); Assert.AreEqual(RegionOutcome.AutodetectSuccess, result.AuthenticationResultMetadata.RegionDetails.RegionOutcome); Assert.IsNull(result.AuthenticationResultMetadata.RegionDetails.AutoDetectionError); // when switching to non-region, token is found in the cache result = await appWithoutRegion .AcquireTokenForClient(TestConstants.s_scope) .ExecuteAsync(CancellationToken.None) .ConfigureAwait(false); Assert.AreEqual(null, result.ApiEvent.RegionUsed); Assert.IsNull(result.ApiEvent.AutoDetectedRegion); Assert.AreEqual(RegionAutodetectionSource.None, result.ApiEvent.RegionAutodetectionSource); Assert.AreEqual(RegionOutcome.None, result.ApiEvent.RegionOutcome); Assert.IsTrue(result.AuthenticationResultMetadata.TokenSource == TokenSource.Cache); Assert.IsNull(result.AuthenticationResultMetadata.RegionDetails.RegionUsed); Assert.AreEqual(RegionOutcome.None, result.AuthenticationResultMetadata.RegionDetails.RegionOutcome); Assert.IsNull(result.AuthenticationResultMetadata.RegionDetails.AutoDetectionError); } }
public async Task TokensAreInterchangable_NonRegional_To_Regional_Async() { using (var httpManager = new MockHttpManager()) { httpManager.AddInstanceDiscoveryMockHandler(); httpManager.AddMockHandler(CreateTokenResponseHttpHandler(false)); IConfidentialClientApplication appWithRegion = CreateCca( httpManager, ConfidentialClientApplication.AttemptRegionDiscovery); InMemoryTokenCache memoryTokenCache = new InMemoryTokenCache(); memoryTokenCache.Bind(appWithRegion.AppTokenCache); IConfidentialClientApplication appWithoutRegion = CreateCca( httpManager, null); memoryTokenCache.Bind(appWithoutRegion.AppTokenCache); AuthenticationResult result = await appWithoutRegion .AcquireTokenForClient(TestConstants.s_scope) .ExecuteAsync(CancellationToken.None) .ConfigureAwait(false); Assert.IsTrue(result.AuthenticationResultMetadata.TokenSource == TokenSource.IdentityProvider); httpManager.AddRegionDiscoveryMockHandler("uscentral"); // when switching to non-region, token is found in the cache result = await appWithRegion .AcquireTokenForClient(TestConstants.s_scope) .ExecuteAsync(CancellationToken.None) .ConfigureAwait(false); Assert.IsTrue(result.AuthenticationResultMetadata.TokenSource == TokenSource.Cache); } }
private void SetupMocks(MockHttpManager httpManager) { httpManager.AddRegionDiscoveryMockHandler(File.ReadAllText( ResourceHelper.GetTestResourceRelativePath("local-imds-response.json"))); }
public async Task FetchRegionFromLocalImdsCallAsync() { using (var httpManager = new MockHttpManager()) { httpManager.AddRegionDiscoveryMockHandler(TestConstants.Region); IConfidentialClientApplication app = CreateCca( httpManager, ConfidentialClientApplication.AttemptRegionDiscovery); httpManager.AddMockHandler(CreateTokenResponseHttpHandler(true)); AuthenticationResult result = await app .AcquireTokenForClient(TestConstants.s_scope) .ExecuteAsync(CancellationToken.None) .ConfigureAwait(false); Assert.AreEqual(TestConstants.Region, result.ApiEvent.RegionUsed); Assert.AreEqual((int)RegionAutodetectionSource.Imds, result.ApiEvent.RegionAutodetectionSource); Assert.AreEqual((int)RegionOutcome.AutodetectSuccess, result.ApiEvent.RegionOutcome); // try again, result will be from cache result = await app .AcquireTokenForClient(TestConstants.s_scope) .ExecuteAsync(CancellationToken.None) .ConfigureAwait(false); Assert.AreEqual(TestConstants.Region, result.ApiEvent.RegionUsed); Assert.AreEqual((int)RegionAutodetectionSource.Cache, result.ApiEvent.RegionAutodetectionSource); Assert.AreEqual((int)RegionOutcome.AutodetectSuccess, result.ApiEvent.RegionOutcome); Assert.IsTrue(result.AuthenticationResultMetadata.TokenSource == TokenSource.Cache); // try again, with force refresh, region should be from cache httpManager.AddMockHandler(CreateTokenResponseHttpHandler(true)); result = await app .AcquireTokenForClient(TestConstants.s_scope) .WithForceRefresh(true) .ExecuteAsync(CancellationToken.None) .ConfigureAwait(false); Assert.AreEqual(TestConstants.Region, result.ApiEvent.RegionUsed); Assert.AreEqual((int)RegionAutodetectionSource.Cache, result.ApiEvent.RegionAutodetectionSource); Assert.AreEqual((int)RegionOutcome.AutodetectSuccess, result.ApiEvent.RegionOutcome); Assert.IsTrue(result.AuthenticationResultMetadata.TokenSource == TokenSource.IdentityProvider); // try again, create a new app, result should still be from cache IConfidentialClientApplication app2 = CreateCca( httpManager, ConfidentialClientApplication.AttemptRegionDiscovery); httpManager.AddMockHandler(CreateTokenResponseHttpHandler(true)); result = await app2 .AcquireTokenForClient(TestConstants.s_scope) .ExecuteAsync(CancellationToken.None) .ConfigureAwait(false); Assert.AreEqual(TestConstants.Region, result.ApiEvent.RegionUsed); Assert.AreEqual((int)RegionAutodetectionSource.Cache, result.ApiEvent.RegionAutodetectionSource); Assert.AreEqual((int)RegionOutcome.AutodetectSuccess, result.ApiEvent.RegionOutcome); Assert.IsTrue(result.AuthenticationResultMetadata.TokenSource == TokenSource.IdentityProvider); } }
private void SetupMocks(MockHttpManager httpManager) { httpManager.AddRegionDiscoveryMockHandler(TestConstants.Region); }