protected override async Task <HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { if (Logging.IsEnabled) { Logging.Enter(this, $"{request.RequestUri}", nameof(SendAsync)); } HttpResponseMessage response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false); if (response.StatusCode == HttpStatusCode.Unauthorized) { #if NET5_0_OR_GREATER if (request.Options.TryGetValue(new HttpRequestOptionsKey <object>(ProvisioningHeaderName), out object result)) #else if (request.Properties.TryGetValue(ProvisioningHeaderName, out object result)) #endif { if (result is Action <string> setSasToken) { string target = GetTarget(request.RequestUri.LocalPath); string responseContent = await response.Content.ReadHttpContentAsStringAsync(cancellationToken).ConfigureAwait(false); TpmChallenge challenge = JsonConvert.DeserializeObject <TpmChallenge>(responseContent); string sasToken = ProvisioningSasBuilder.ExtractServiceAuthKey( _securityProvider, target, Convert.FromBase64String(challenge.AuthenticationKey)); setSasToken(sasToken); if (Logging.IsEnabled) { Logging.Info(this, $"Authorization challenge. Retrying with Token:{sasToken}"); } response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false); } } } if (Logging.IsEnabled) { Logging.Exit(this, $"{request.RequestUri}", nameof(SendAsync)); } return(response); }
private void SendLastResponse() { string sas = ProvisioningSasBuilder.ExtractServiceAuthKey( _security, _hostName, _nonceBuffer); byte[] responseBuffer = new byte[sas.Length + 1]; responseBuffer[0] = 0x0; Buffer.BlockCopy(Encoding.UTF8.GetBytes(sas), 0, responseBuffer, 1, sas.Length); var response = new SaslResponse { Response = new ArraySegment <byte>(responseBuffer) }; Negotiator.WriteFrame(response, true); }