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(); ReadOnlyCollectionexternalAuthorizationPolicies; 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
- Stack.cs
- WebBrowserProgressChangedEventHandler.cs
- InvokeBinder.cs
- XmlMtomWriter.cs
- MetadataStore.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- ForceCopyBuildProvider.cs
- CredentialCache.cs
- ScriptReferenceBase.cs
- SystemIPInterfaceStatistics.cs
- CollectionChangeEventArgs.cs
- SizeAnimationUsingKeyFrames.cs
- RewritingProcessor.cs
- DependencySource.cs
- DocumentScope.cs
- DTCTransactionManager.cs
- NamespaceDecl.cs
- TabItemAutomationPeer.cs
- WinEventHandler.cs
- ConnectivityStatus.cs
- Pts.cs
- ProviderConnectionPointCollection.cs
- LockedHandleGlyph.cs
- PropertyChangingEventArgs.cs
- ContextTokenTypeConverter.cs
- Hash.cs
- AppAction.cs
- SocketElement.cs
- SymbolEqualComparer.cs
- Substitution.cs
- BamlBinaryWriter.cs
- EventLogPermissionEntryCollection.cs
- BCryptNative.cs
- SqlRetyper.cs
- CacheHelper.cs
- ImageDrawing.cs
- SystemResources.cs
- PictureBox.cs
- BasePropertyDescriptor.cs
- DesignerAttribute.cs
- HasActivatableWorkflowEvent.cs
- MediaContext.cs
- XmlSchemaType.cs
- SmiSettersStream.cs
- TypefaceMetricsCache.cs
- TraceHwndHost.cs
- CreateWorkflowOwnerCommand.cs
- PermissionToken.cs
- PathGradientBrush.cs
- ProfileInfo.cs
- EntityClassGenerator.cs
- ContextStaticAttribute.cs
- ScrollEventArgs.cs
- SortedDictionary.cs
- InstancePersistenceContext.cs
- BasePattern.cs
- HttpTransportSecurityElement.cs
- SynchronizingStream.cs
- SharedPersonalizationStateInfo.cs
- AlgoModule.cs
- AspNetHostingPermission.cs
- SourceFileBuildProvider.cs
- WebPartHeaderCloseVerb.cs
- MethodExpr.cs
- DeclarativeConditionsCollection.cs
- FilterException.cs
- MenuItemStyleCollection.cs
- PersistencePipeline.cs
- GenerateScriptTypeAttribute.cs
- Models.cs
- StaticTextPointer.cs
- XmlSchemaSimpleTypeUnion.cs
- RestClientProxyHandler.cs
- XmlSchemaElement.cs
- Parsers.cs
- IISMapPath.cs
- WsatServiceCertificate.cs
- DataControlField.cs
- QuaternionValueSerializer.cs
- LinearGradientBrush.cs
- FileDialogCustomPlace.cs
- HyperLinkStyle.cs
- CodeTypeMember.cs
- ResourceFallbackManager.cs
- Scheduler.cs
- xsdvalidator.cs
- WebPartConnectionsCancelVerb.cs
- XmlEnumAttribute.cs
- TcpClientSocketManager.cs
- ChildTable.cs
- mansign.cs
- ToolBarTray.cs
- IntranetCredentialPolicy.cs
- ProviderException.cs
- WebService.cs
- SecurityDescriptor.cs
- LabelLiteral.cs
- RenderData.cs
- ModelItemExtensions.cs
- CustomTrackingRecord.cs