public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime) { var behavior = dispatchRuntime.ChannelDispatcher.Host.Description.FindBehavior <WebAuthenticationConfigurationBehavior, WebAuthenticationConfigurationAttribute>(b => b.BaseBehavior); if (behavior == null) behavior = contractDescription.FindBehavior <WebAuthenticationConfigurationBehavior, WebAuthenticationConfigurationAttribute>(b => b.BaseBehavior); if (behavior == null) throw new ServiceAuthenticationConfigurationMissingException(); var authorizationBehavior = dispatchRuntime.ChannelDispatcher.Host.Description.FindBehavior <WebAuthorizationConfigurationBehavior, WebAuthorizationConfigurationAttribute>(b => b.BaseBehavior); Type authorizationPolicy = null; if (authorizationBehavior != null) authorizationPolicy = authorizationBehavior.AuthorizationPolicyType; foreach (var endpointDispatcher in dispatchRuntime.ChannelDispatcher.Endpoints) endpointDispatcher.DispatchRuntime.MessageInspectors.Add( new ServiceAuthenticationInspector( behavior.ThrowIfNull().AuthenticationHandler, behavior.UsernamePasswordValidatorType, behavior.RequireSecureTransport, behavior.Source, authorizationPolicy)); }
// ────────────────────────── IContractBehavior Members ────────────────────────── public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime) { var behavior = dispatchRuntime.ChannelDispatcher.Host.Description.FindBehavior <OAuthAuthenticationConfigurationBehavior, OAuthAuthenticationConfigurationAttribute>(b => b.BaseBehavior); if (behavior == null) behavior = contractDescription.FindBehavior <OAuthAuthenticationConfigurationBehavior, OAuthAuthenticationConfigurationAttribute>(b => b.BaseBehavior); if (behavior == null) throw new ServiceAuthenticationConfigurationMissingException(); var scopeToUse = string.IsNullOrWhiteSpace(this.Scope) ? behavior.Scope : this.Scope; foreach (var endpointDispatcher in dispatchRuntime.ChannelDispatcher.Endpoints) endpointDispatcher.DispatchRuntime.MessageInspectors.Add( new ServiceOAuthAuthenticationInspector( behavior.AuthenticationHandler, behavior.RequireSecureTransport, scopeToUse, AllowAnonymous)); }