diff --git a/src/Accounts/Accounts/CommonModule/ContextAdapter.cs b/src/Accounts/Accounts/CommonModule/ContextAdapter.cs index bf88f586494f..19ce2af43de4 100644 --- a/src/Accounts/Accounts/CommonModule/ContextAdapter.cs +++ b/src/Accounts/Accounts/CommonModule/ContextAdapter.cs @@ -195,30 +195,35 @@ public object GetParameterValue(string resourceId, string moduleName, Invocation internal async Task AuthenticationHelper(IAzureContext context, string endpointResourceIdKey, string endpointSuffixKey, HttpRequestMessage request, CancellationToken cancelToken, Action cancelAction, SignalDelegate signal, NextDelegate next, TokenAudienceConverterDelegate tokenAudienceConverter = null) { IAccessToken accessToken = await AuthorizeRequest(context, request, cancelToken, endpointResourceIdKey, endpointSuffixKey, tokenAudienceConverter); - var newRequest = await request.CloneWithContentAndDispose(request.RequestUri, request.Method); - var response = await next(request, cancelToken, cancelAction, signal); - - if (response.MatchClaimsChallengePattern()) + using (var newRequest = await request.CloneWithContent(request.RequestUri, request.Method)) { - //get token again with claims challenge - if (accessToken is IClaimsChallengeProcessor processor) + var response = await next(request, cancelToken, cancelAction, signal); + + if (response.MatchClaimsChallengePattern()) { - try + //get token again with claims challenge + if (accessToken is IClaimsChallengeProcessor processor) { - var claimsChallenge = ClaimsChallengeUtilities.GetClaimsChallenge(response); - if (!string.IsNullOrEmpty(claimsChallenge)) + try { - await processor.OnClaimsChallenageAsync(newRequest, claimsChallenge, cancelToken).ConfigureAwait(false); - response = await next(newRequest, cancelToken, cancelAction, signal); + var claimsChallenge = ClaimsChallengeUtilities.GetClaimsChallenge(response); + if (!string.IsNullOrEmpty(claimsChallenge)) + { + await processor.OnClaimsChallenageAsync(newRequest, claimsChallenge, cancelToken).ConfigureAwait(false); + using (var previousReponse = response) + { + response = await next(newRequest, cancelToken, cancelAction, signal); + } + } + } + catch (AuthenticationFailedException e) + { + throw e.WithAdditionalMessage(response?.GetWwwAuthenticateMessage()); } - } - catch (AuthenticationFailedException e) - { - throw e.WithAdditionalMessage(response?.GetWwwAuthenticateMessage()); } } + return response; } - return response; } /// diff --git a/tools/Test/SmokeTest/RmCoreSmokeTests.ps1 b/tools/Test/SmokeTest/RmCoreSmokeTests.ps1 index b8be33e57e56..22bf9a76f8f9 100644 --- a/tools/Test/SmokeTest/RmCoreSmokeTests.ps1 +++ b/tools/Test/SmokeTest/RmCoreSmokeTests.ps1 @@ -155,7 +155,7 @@ $resourceTestCommands = @( @{Name = "Az.StorageSync"; Command = {Get-AzStorageSyncService -ErrorAction Stop}}, @{Name = "Az.Support"; Command = {Get-AzSupportTicket -ErrorAction Stop}}, @{Name = "Az.Resources [Tags]"; Command = {Get-AzTag -ErrorAction Stop}}, - @{Name = "Az.Resources [MSGraph]"; Command = {Get-AzAdGroup -First 1 -ErrorAction Stop}}, + #@{Name = "Az.Resources [MSGraph]"; Command = {Get-AzAdGroup -First 1 -ErrorAction Stop}}, @{Name = "Az.TrafficManager"; Command = {Get-AzTrafficManagerProfile -ErrorAction Stop}}, @{Name = "Az.Billing [UsageAggregates]"; Command = {Get-UsageAggregates -ReportedStartTime '1/1/2018' -ReportedEndTime '1/2/2018' -ErrorAction Stop}}, @{Name = "Az.Websites"; Command = {Get-AzWebApp -ErrorAction Stop}}