Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Dispatcher / AuthorizationBehavior.cs / 1 / AuthorizationBehavior.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.ServiceModel.Dispatcher
{
using System.Diagnostics;
using System.Collections.Generic;
using System.ServiceModel.Channels;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Collections.ObjectModel;
using System.Globalization;
using System.ServiceModel.Diagnostics;
using System.ServiceModel.Security;
using System.ServiceModel.Security.Tokens;
using System.IdentityModel.Claims;
using System.IdentityModel.Policy;
using System.Security.Principal;
using System.Runtime.CompilerServices;
sealed class AuthorizationBehavior
{
static ServiceAuthorizationManager DefaultServiceAuthorizationManager = new ServiceAuthorizationManager();
ReadOnlyCollection externalAuthorizationPolicies;
ServiceAuthorizationManager serviceAuthorizationManager;
AuditLogLocation auditLogLocation;
bool suppressAuditFailure;
AuditLevel serviceAuthorizationAuditLevel;
AuthorizationBehavior() { }
public void Authorize(ref MessageRpc rpc)
{
SecurityMessageProperty security = SecurityMessageProperty.GetOrCreate(rpc.Request);
security.ExternalAuthorizationPolicies = this.externalAuthorizationPolicies;
ServiceAuthorizationManager serviceAuthorizationManager = this.serviceAuthorizationManager ?? DefaultServiceAuthorizationManager;
try
{
if (!serviceAuthorizationManager.CheckAccess(rpc.OperationContext, ref rpc.Request))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateAccessDeniedFaultException());
}
}
catch (Exception ex)
{
if (DiagnosticUtility.IsFatal(ex))
{
throw;
}
if (PerformanceCounters.PerformanceCountersEnabled)
{
PerformanceCounters.AuthorizationFailed(rpc.Operation.Name);
}
if (AuditLevel.Failure == (this.serviceAuthorizationAuditLevel & AuditLevel.Failure))
{
try
{
string primaryIdentity;
string authContextId = null;
AuthorizationContext authContext = security.ServiceSecurityContext.AuthorizationContext;
if (authContext != null)
{
primaryIdentity = SecurityUtils.GetIdentityNamesFromContext(authContext);
authContextId = authContext.Id;
}
else
{
primaryIdentity = SecurityUtils.AnonymousIdentity.Name;
authContextId = "";
}
SecurityAuditHelper.WriteServiceAuthorizationFailureEvent(this.auditLogLocation,
this.suppressAuditFailure, rpc.Request, rpc.Request.Headers.To, rpc.Request.Headers.Action,
primaryIdentity, authContextId,
serviceAuthorizationManager == DefaultServiceAuthorizationManager ? "" : serviceAuthorizationManager.GetType().Name,
ex);
}
#pragma warning suppress 56500
catch (Exception auditException)
{
if (DiagnosticUtility.IsFatal(auditException))
throw;
DiagnosticUtility.ExceptionUtility.TraceHandledException(auditException, TraceEventType.Error);
}
}
throw;
}
if (AuditLevel.Success == (this.serviceAuthorizationAuditLevel & AuditLevel.Success))
{
string primaryIdentity;
string authContextId;
AuthorizationContext authContext = security.ServiceSecurityContext.AuthorizationContext;
if (authContext != null)
{
primaryIdentity = SecurityUtils.GetIdentityNamesFromContext(authContext);
authContextId = authContext.Id;
}
else
{
primaryIdentity = SecurityUtils.AnonymousIdentity.Name;
authContextId = "";
}
SecurityAuditHelper.WriteServiceAuthorizationSuccessEvent(this.auditLogLocation,
this.suppressAuditFailure, rpc.Request, rpc.Request.Headers.To, rpc.Request.Headers.Action,
primaryIdentity, authContextId,
serviceAuthorizationManager == DefaultServiceAuthorizationManager ? "" : serviceAuthorizationManager.GetType().Name);
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
static AuthorizationBehavior CreateAuthorizationBehavior(DispatchRuntime dispatch)
{
AuthorizationBehavior behavior = new AuthorizationBehavior();
behavior.externalAuthorizationPolicies = dispatch.ExternalAuthorizationPolicies;
behavior.serviceAuthorizationManager = dispatch.ServiceAuthorizationManager;
behavior.auditLogLocation = dispatch.SecurityAuditLogLocation;
behavior.suppressAuditFailure = dispatch.SuppressAuditFailure;
behavior.serviceAuthorizationAuditLevel = dispatch.ServiceAuthorizationAuditLevel;
return behavior;
}
public static AuthorizationBehavior TryCreate(DispatchRuntime dispatch)
{
if (dispatch == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("dispatch"));
if (!dispatch.RequiresAuthorization)
return null;
return CreateAuthorizationBehavior(dispatch);
}
internal static Exception CreateAccessDeniedFaultException()
{
// always use default version?
SecurityVersion wss = SecurityVersion.Default;
FaultCode faultCode = FaultCode.CreateSenderFaultCode(wss.FailedAuthenticationFaultCode.Value, wss.HeaderNamespace.Value);
FaultReason faultReason = new FaultReason(SR.GetString(SR.AccessDenied), CultureInfo.CurrentCulture);
return new FaultException(faultReason, faultCode);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- VisualStyleElement.cs
- Preprocessor.cs
- ProcessingInstructionAction.cs
- SafeHGlobalHandleCritical.cs
- WebControlParameterProxy.cs
- WindowsFormsHelpers.cs
- RegistryExceptionHelper.cs
- SqlParameterCollection.cs
- ExecutedRoutedEventArgs.cs
- InboundActivityHelper.cs
- FlowLayout.cs
- CompiledQuery.cs
- MILUtilities.cs
- Utils.cs
- FormatVersion.cs
- LayoutUtils.cs
- ConnectorDragDropGlyph.cs
- AnonymousIdentificationModule.cs
- TextContainerHelper.cs
- Semaphore.cs
- DataGridViewCell.cs
- StackSpiller.Bindings.cs
- EmptyControlCollection.cs
- InternalDispatchObject.cs
- StoreContentChangedEventArgs.cs
- ReadWriteObjectLock.cs
- SerialPinChanges.cs
- Int64Animation.cs
- CreateBookmarkScope.cs
- WebConfigurationHost.cs
- SystemMulticastIPAddressInformation.cs
- addressfiltermode.cs
- ToolStripStatusLabel.cs
- MatrixCamera.cs
- BinaryUtilClasses.cs
- ReadOnlyDataSourceView.cs
- StylusDownEventArgs.cs
- ReflectionPermission.cs
- OdbcConnectionStringbuilder.cs
- DataGridViewComboBoxEditingControl.cs
- UpdateTracker.cs
- ListBoxItemAutomationPeer.cs
- BinaryExpression.cs
- UriSection.cs
- SiteMapDataSource.cs
- IBuiltInEvidence.cs
- CompleteWizardStep.cs
- Columns.cs
- CngProperty.cs
- HwndHost.cs
- UnicastIPAddressInformationCollection.cs
- SeverityFilter.cs
- Menu.cs
- PtsContext.cs
- DecimalConverter.cs
- AnnotationHelper.cs
- HttpHandlerActionCollection.cs
- Transform.cs
- PriorityQueue.cs
- RijndaelManagedTransform.cs
- safemediahandle.cs
- WebControlParameterProxy.cs
- DecoderReplacementFallback.cs
- FlowLayoutPanel.cs
- PipelineModuleStepContainer.cs
- SecurityUtils.cs
- RecordManager.cs
- SafeArrayTypeMismatchException.cs
- XmlSchemaNotation.cs
- DataGridAddNewRow.cs
- SBCSCodePageEncoding.cs
- CharacterHit.cs
- FormClosingEvent.cs
- FileUpload.cs
- TextParagraphView.cs
- MetadataArtifactLoader.cs
- AccessorTable.cs
- SafeFileMappingHandle.cs
- _TimerThread.cs
- BulletedList.cs
- NativeMethods.cs
- MimeBasePart.cs
- CollectionBuilder.cs
- SessionStateContainer.cs
- CodeGroup.cs
- WindowsProgressbar.cs
- ProcessThreadDesigner.cs
- Calendar.cs
- LayoutTable.cs
- SerializationAttributes.cs
- xmlformatgeneratorstatics.cs
- _SingleItemRequestCache.cs
- NumberAction.cs
- QueryCacheEntry.cs
- QilPatternFactory.cs
- SpellCheck.cs
- SimpleTextLine.cs
- Int16Converter.cs
- IERequestCache.cs
- DesignerExtenders.cs