protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// Attempt to reuse last credentials used for the same origin server (Preauthenticate)
if (request.Headers.Authorization == null)
{
request.Headers.Authorization = _credentialService.CreateAuthenticationHeaderFromRequest(request);
}
var response = await base.SendAsync(request, cancellationToken);
// If request failed and challenge issued
if (response.StatusCode == HttpStatusCode.Unauthorized && response.Headers.WwwAuthenticate.Count > 0)
{
// Can't automatically resend the request if it is not buffered.
// Not sure how to detect this
var authHeader = _credentialService.CreateAuthenticationHeaderFromChallenge(request, response.Headers.WwwAuthenticate);
if (authHeader != null)
{
var newRequest = await CopyRequest(request);
newRequest.Headers.Authorization = authHeader;
// Resend request with auth header based on challenge
response = await base.SendAsync(newRequest, cancellationToken);
}
}
return(response);
}