public override void ProcessRequest(ref System.ServiceModel.Channels.RequestContext requestContext) { var request = requestContext.RequestMessage; if (endpointFilter == null || endpointFilter(request)) { IPrincipal principal = ExtractCredentials(request); if (principal != null) { InitializeSecurityContext(request, principal); } else { var reply = Message.CreateMessage(MessageVersion.None, null); var responseProperty = new HttpResponseMessageProperty() { StatusCode = HttpStatusCode.Unauthorized }; if (sendChallenge) { var ts = Hawk.ConvertToUnixTimestamp(DateTime.Now).ToString(); var challenge = string.Format("ts=\"{0}\" ntp=\"{1}\"", ts, "pool.ntp.org"); responseProperty.Headers.Add("WWW-Authenticate", challenge); } reply.Properties[HttpResponseMessageProperty.Name] = responseProperty; requestContext.Reply(reply); requestContext = null; } } }
public override void ProcessRequest(ref System.ServiceModel.Channels.RequestContext requestContext) { if (Trace.CorrelationManager.ActivityId == Guid.Empty) Trace.CorrelationManager.ActivityId = Guid.NewGuid(); var request = requestContext.RequestMessage; if (endpointFilter == null || endpointFilter(request)) { try { IPrincipal principal = ExtractCredentials(request); if (principal != null) { InitializeSecurityContext(request, principal); } else { var reply = Message.CreateMessage(MessageVersion.None, null); var responseProperty = new HttpResponseMessageProperty() { StatusCode = HttpStatusCode.Unauthorized }; if (sendChallenge) { var ts = Hawk.ConvertToUnixTimestamp(DateTime.Now).ToString(); var challenge = string.Format("ts=\"{0}\" ntp=\"{1}\"", ts, "pool.ntp.org"); responseProperty.Headers.Add("WWW-Authenticate", challenge); } reply.Properties[HttpResponseMessageProperty.Name] = responseProperty; requestContext.Reply(reply); requestContext = null; } } catch (SecurityException ex) { TraceSource.TraceData(TraceEventType.Error, 0, string.Format("{0} - Security Exception {1}", Trace.CorrelationManager.ActivityId, ex.ToString())); var reply = Message.CreateMessage(MessageVersion.None, null, (object)ex.Message); var responseProperty = new HttpResponseMessageProperty() { StatusCode = HttpStatusCode.Unauthorized }; reply.Properties[HttpResponseMessageProperty.Name] = responseProperty; requestContext.Reply(reply); requestContext = null; } } }