private void DetachAuthenticationhandler(AuthenticationHandler handler) { var auth = handler.HttpContext.Features.Get <IHttpAuthenticationFeature>(); if (auth != null) { auth.Handler = handler.PriorHandler; } }
private void AttachAuthenticationHandler(AuthenticationHandler handler) { var auth = handler.HttpContext.Features.Get <IHttpAuthenticationFeature>(); if (auth == null) { auth = new HttpAuthenticationFeature(); handler.HttpContext.Features.Set(auth); } handler.PriorHandler = auth.Handler; auth.Handler = handler; }
public async Task Invoke(HttpContext httpContext) { if (!string.Equals(_pairingToken, httpContext.Request.Headers[MSAspNetCoreToken], StringComparison.Ordinal)) { _logger.LogError($"'{MSAspNetCoreToken}' does not match the expected pairing token '{_pairingToken}', request rejected."); httpContext.Response.StatusCode = 400; return; } if (Debugger.IsAttached && string.Equals("DEBUG", httpContext.Request.Method, StringComparison.OrdinalIgnoreCase)) { // The Visual Studio debugger tooling sends a DEBUG request to make IIS & AspNetCoreModule launch the process // so the debugger can attach. Filter out this request from the app. return; } if (_options.ForwardClientCertificate) { var header = httpContext.Request.Headers[MSAspNetCoreClientCert]; if (!StringValues.IsNullOrEmpty(header)) { httpContext.Features.Set <ITlsConnectionFeature>(new ForwardedTlsConnectionFeature(_logger, header)); } } if (_options.ForwardWindowsAuthentication) { var winPrincipal = UpdateUser(httpContext); var handler = new AuthenticationHandler(httpContext, _options, winPrincipal); AttachAuthenticationHandler(handler); try { await _next(httpContext); } finally { DetachAuthenticationhandler(handler); } } else { await _next(httpContext); } }
public async Task Invoke(HttpContext httpContext) { if (!string.Equals(_pairingToken, httpContext.Request.Headers[MSAspNetCoreToken], StringComparison.Ordinal)) { _logger.LogError($"'{MSAspNetCoreToken}' does not match the expected pairing token '{_pairingToken}', request rejected."); httpContext.Response.StatusCode = 400; return; } if (_options.ForwardClientCertificate) { var header = httpContext.Request.Headers[MSAspNetCoreClientCert]; if (!StringValues.IsNullOrEmpty(header)) { httpContext.Features.Set <ITlsConnectionFeature>(new ForwardedTlsConnectionFeature(_logger, header)); } } if (_options.ForwardWindowsAuthentication) { var winPrincipal = UpdateUser(httpContext); var handler = new AuthenticationHandler(httpContext, _options, winPrincipal); AttachAuthenticationHandler(handler); try { await _next(httpContext); } finally { DetachAuthenticationhandler(handler); } } else { await _next(httpContext); } }