@@ -195,30 +195,35 @@ public object GetParameterValue(string resourceId, string moduleName, Invocation
195
195
internal async Task < HttpResponseMessage > AuthenticationHelper ( IAzureContext context , string endpointResourceIdKey , string endpointSuffixKey , HttpRequestMessage request , CancellationToken cancelToken , Action cancelAction , SignalDelegate signal , NextDelegate next , TokenAudienceConverterDelegate tokenAudienceConverter = null )
196
196
{
197
197
IAccessToken accessToken = await AuthorizeRequest ( context , request , cancelToken , endpointResourceIdKey , endpointSuffixKey , tokenAudienceConverter ) ;
198
- var newRequest = await request . CloneWithContentAndDispose ( request . RequestUri , request . Method ) ;
199
- var response = await next ( request , cancelToken , cancelAction , signal ) ;
200
-
201
- if ( response . MatchClaimsChallengePattern ( ) )
198
+ using ( var newRequest = await request . CloneWithContent ( request . RequestUri , request . Method ) )
202
199
{
203
- //get token again with claims challenge
204
- if ( accessToken is IClaimsChallengeProcessor processor )
200
+ var response = await next ( request , cancelToken , cancelAction , signal ) ;
201
+
202
+ if ( response . MatchClaimsChallengePattern ( ) )
205
203
{
206
- try
204
+ //get token again with claims challenge
205
+ if ( accessToken is IClaimsChallengeProcessor processor )
207
206
{
208
- var claimsChallenge = ClaimsChallengeUtilities . GetClaimsChallenge ( response ) ;
209
- if ( ! string . IsNullOrEmpty ( claimsChallenge ) )
207
+ try
210
208
{
211
- await processor . OnClaimsChallenageAsync ( newRequest , claimsChallenge , cancelToken ) . ConfigureAwait ( false ) ;
212
- response = await next ( newRequest , cancelToken , cancelAction , signal ) ;
209
+ var claimsChallenge = ClaimsChallengeUtilities . GetClaimsChallenge ( response ) ;
210
+ if ( ! string . IsNullOrEmpty ( claimsChallenge ) )
211
+ {
212
+ await processor . OnClaimsChallenageAsync ( newRequest , claimsChallenge , cancelToken ) . ConfigureAwait ( false ) ;
213
+ using ( var previousReponse = response )
214
+ {
215
+ response = await next ( newRequest , cancelToken , cancelAction , signal ) ;
216
+ }
217
+ }
218
+ }
219
+ catch ( AuthenticationFailedException e )
220
+ {
221
+ throw e . WithAdditionalMessage ( response ? . GetWwwAuthenticateMessage ( ) ) ;
213
222
}
214
- }
215
- catch ( AuthenticationFailedException e )
216
- {
217
- throw e . WithAdditionalMessage ( response ? . GetWwwAuthenticateMessage ( ) ) ;
218
223
}
219
224
}
225
+ return response ;
220
226
}
221
- return response ;
222
227
}
223
228
224
229
/// <summary>
0 commit comments