e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
142 lines
5.6 KiB
C#
142 lines
5.6 KiB
C#
//-----------------------------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
namespace System.ServiceModel.Description
|
|
{
|
|
using System;
|
|
using System.Collections.ObjectModel;
|
|
using System.ServiceModel;
|
|
using System.ServiceModel.Channels;
|
|
using System.ServiceModel.Dispatcher;
|
|
|
|
public sealed class ServiceSecurityAuditBehavior : IServiceBehavior
|
|
{
|
|
internal const AuditLogLocation defaultAuditLogLocation = AuditLogLocation.Default;
|
|
internal const bool defaultSuppressAuditFailure = true;
|
|
internal const AuditLevel defaultServiceAuthorizationAuditLevel = AuditLevel.None;
|
|
internal const AuditLevel defaultMessageAuthenticationAuditLevel = AuditLevel.None;
|
|
|
|
AuditLogLocation auditLogLocation;
|
|
bool suppressAuditFailure;
|
|
AuditLevel serviceAuthorizationAuditLevel;
|
|
AuditLevel messageAuthenticationAuditLevel;
|
|
|
|
public ServiceSecurityAuditBehavior()
|
|
{
|
|
this.auditLogLocation = ServiceSecurityAuditBehavior.defaultAuditLogLocation;
|
|
this.suppressAuditFailure = ServiceSecurityAuditBehavior.defaultSuppressAuditFailure;
|
|
this.serviceAuthorizationAuditLevel = ServiceSecurityAuditBehavior.defaultServiceAuthorizationAuditLevel;
|
|
this.messageAuthenticationAuditLevel = ServiceSecurityAuditBehavior.defaultMessageAuthenticationAuditLevel;
|
|
}
|
|
|
|
ServiceSecurityAuditBehavior(ServiceSecurityAuditBehavior behavior)
|
|
{
|
|
this.auditLogLocation = behavior.auditLogLocation;
|
|
this.suppressAuditFailure = behavior.suppressAuditFailure;
|
|
this.serviceAuthorizationAuditLevel = behavior.serviceAuthorizationAuditLevel;
|
|
this.messageAuthenticationAuditLevel = behavior.messageAuthenticationAuditLevel;
|
|
}
|
|
|
|
public AuditLogLocation AuditLogLocation
|
|
{
|
|
get
|
|
{
|
|
return this.auditLogLocation;
|
|
}
|
|
set
|
|
{
|
|
if (!AuditLogLocationHelper.IsDefined(value))
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
|
|
|
|
this.auditLogLocation = value;
|
|
}
|
|
}
|
|
|
|
public bool SuppressAuditFailure
|
|
{
|
|
get
|
|
{
|
|
return this.suppressAuditFailure;
|
|
}
|
|
set
|
|
{
|
|
this.suppressAuditFailure = value;
|
|
}
|
|
}
|
|
|
|
public AuditLevel ServiceAuthorizationAuditLevel
|
|
{
|
|
get
|
|
{
|
|
return this.serviceAuthorizationAuditLevel;
|
|
}
|
|
set
|
|
{
|
|
if (!AuditLevelHelper.IsDefined(value))
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
|
|
|
|
this.serviceAuthorizationAuditLevel = value;
|
|
}
|
|
}
|
|
|
|
public AuditLevel MessageAuthenticationAuditLevel
|
|
{
|
|
get
|
|
{
|
|
return this.messageAuthenticationAuditLevel;
|
|
}
|
|
set
|
|
{
|
|
if (!AuditLevelHelper.IsDefined(value))
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
|
|
|
|
this.messageAuthenticationAuditLevel = value;
|
|
}
|
|
}
|
|
|
|
internal ServiceSecurityAuditBehavior Clone()
|
|
{
|
|
return new ServiceSecurityAuditBehavior(this);
|
|
}
|
|
|
|
void IServiceBehavior.Validate(ServiceDescription description, ServiceHostBase serviceHostBase)
|
|
{
|
|
}
|
|
|
|
void IServiceBehavior.AddBindingParameters(ServiceDescription description, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection parameters)
|
|
{
|
|
if (parameters == null)
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("parameters"));
|
|
|
|
parameters.Add(this);
|
|
}
|
|
|
|
void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase serviceHostBase)
|
|
{
|
|
if (description == null)
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("description"));
|
|
if (serviceHostBase == null)
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("serviceHostBase"));
|
|
|
|
for (int i = 0; i < serviceHostBase.ChannelDispatchers.Count; i++)
|
|
{
|
|
ChannelDispatcher channelDispatcher = serviceHostBase.ChannelDispatchers[i] as ChannelDispatcher;
|
|
if (channelDispatcher != null)
|
|
{
|
|
foreach (EndpointDispatcher endpointDispatcher in channelDispatcher.Endpoints)
|
|
{
|
|
if (!endpointDispatcher.IsSystemEndpoint)
|
|
{
|
|
DispatchRuntime behavior = endpointDispatcher.DispatchRuntime;
|
|
behavior.SecurityAuditLogLocation = this.auditLogLocation;
|
|
behavior.SuppressAuditFailure = this.suppressAuditFailure;
|
|
behavior.ServiceAuthorizationAuditLevel = this.serviceAuthorizationAuditLevel;
|
|
behavior.MessageAuthenticationAuditLevel = this.messageAuthenticationAuditLevel;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|