Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / SecurityMessageProperty.cs / 1 / SecurityMessageProperty.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Security { using System.ServiceModel; using System.ServiceModel.Channels; using System.Collections.ObjectModel; using System.Collections.Generic; using System.IdentityModel.Claims; using System.IdentityModel.Policy; using System.IdentityModel.Tokens; using System.ServiceModel.Security.Tokens; using System.Net.Security; public class SecurityMessageProperty : IMessageProperty, IDisposable { // This is the list of outgoing supporting tokens CollectionoutgoingSupportingTokens; Collection incomingSupportingTokens; SecurityTokenSpecification transportToken; SecurityTokenSpecification protectionToken; SecurityTokenSpecification initiatorToken; SecurityTokenSpecification recipientToken; ServiceSecurityContext securityContext; ReadOnlyCollection externalAuthorizationPolicies; string senderIdPrefix = "_"; bool disposed = false; public SecurityMessageProperty() { this.securityContext = ServiceSecurityContext.Anonymous; } public ServiceSecurityContext ServiceSecurityContext { get { ThrowIfDisposed(); return this.securityContext; } set { ThrowIfDisposed(); this.securityContext = value; } } public ReadOnlyCollection ExternalAuthorizationPolicies { get { return this.externalAuthorizationPolicies; } set { this.externalAuthorizationPolicies = value; } } public SecurityTokenSpecification ProtectionToken { get { ThrowIfDisposed(); return this.protectionToken; } set { ThrowIfDisposed(); this.protectionToken = value; } } public SecurityTokenSpecification InitiatorToken { get { ThrowIfDisposed(); return this.initiatorToken; } set { ThrowIfDisposed(); this.initiatorToken = value; } } public SecurityTokenSpecification RecipientToken { get { ThrowIfDisposed(); return this.recipientToken; } set { ThrowIfDisposed(); this.recipientToken = value; } } public SecurityTokenSpecification TransportToken { get { ThrowIfDisposed(); return this.transportToken; } set { ThrowIfDisposed(); this.transportToken = value; } } public string SenderIdPrefix { get { return this.senderIdPrefix; } set { XmlHelper.ValidateIdPrefix(value); this.senderIdPrefix = value; } } public bool HasIncomingSupportingTokens { get { ThrowIfDisposed(); return ((this.incomingSupportingTokens != null) && (this.incomingSupportingTokens.Count > 0)); } } public Collection IncomingSupportingTokens { get { ThrowIfDisposed(); if (this.incomingSupportingTokens == null) { this.incomingSupportingTokens = new Collection (); } return this.incomingSupportingTokens; } } internal Collection OutgoingSupportingTokens { get { if (this.outgoingSupportingTokens == null) { this.outgoingSupportingTokens = new Collection (); } return this.outgoingSupportingTokens; } } internal bool HasOutgoingSupportingTokens { get { return ((this.outgoingSupportingTokens != null) && (this.outgoingSupportingTokens.Count > 0)); } } public IMessageProperty CreateCopy() { ThrowIfDisposed(); SecurityMessageProperty result = new SecurityMessageProperty(); if (this.HasOutgoingSupportingTokens) { for (int i = 0; i < this.outgoingSupportingTokens.Count; ++i) { result.OutgoingSupportingTokens.Add(this.outgoingSupportingTokens[i]); } } if (this.HasIncomingSupportingTokens) { for (int i = 0; i < this.incomingSupportingTokens.Count; ++i) { result.IncomingSupportingTokens.Add(this.incomingSupportingTokens[i]); } } result.securityContext = this.securityContext; result.externalAuthorizationPolicies = this.externalAuthorizationPolicies; result.senderIdPrefix = this.senderIdPrefix; result.protectionToken = this.protectionToken; result.initiatorToken = this.initiatorToken; result.recipientToken = this.recipientToken; result.transportToken = this.transportToken; return result; } public static SecurityMessageProperty GetOrCreate(Message message) { if (message == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message"); SecurityMessageProperty result = null; if (message.Properties != null) result = message.Properties.Security; if (result == null) { result = new SecurityMessageProperty(); message.Properties.Security = result; } return result; } void AddAuthorizationPolicies(SecurityTokenSpecification spec, Collection policies) { if (spec != null && spec.SecurityTokenPolicies != null && spec.SecurityTokenPolicies.Count > 0) { for (int i = 0; i < spec.SecurityTokenPolicies.Count; ++i) { policies.Add(spec.SecurityTokenPolicies[i]); } } } internal ReadOnlyCollection GetInitiatorTokenAuthorizationPolicies() { return GetInitiatorTokenAuthorizationPolicies(true); } internal ReadOnlyCollection GetInitiatorTokenAuthorizationPolicies(bool includeTransportToken) { return GetInitiatorTokenAuthorizationPolicies(includeTransportToken, null); } internal ReadOnlyCollection GetInitiatorTokenAuthorizationPolicies(bool includeTransportToken, SecurityContextSecurityToken supportingSessionTokenToExclude) { // fast path if (!this.HasIncomingSupportingTokens) { if (this.transportToken != null && this.initiatorToken == null && this.protectionToken == null) { if (includeTransportToken && this.transportToken.SecurityTokenPolicies != null) { return this.transportToken.SecurityTokenPolicies; } else { return EmptyReadOnlyCollection .Instance; } } else if (this.transportToken == null && this.initiatorToken != null && this.protectionToken == null) { return this.initiatorToken.SecurityTokenPolicies ?? EmptyReadOnlyCollection .Instance; } else if (this.transportToken == null && this.initiatorToken == null && this.protectionToken != null) { return this.protectionToken.SecurityTokenPolicies ?? EmptyReadOnlyCollection .Instance; } } Collection policies = new Collection (); if (includeTransportToken) { AddAuthorizationPolicies(this.transportToken, policies); } AddAuthorizationPolicies(this.initiatorToken, policies); AddAuthorizationPolicies(this.protectionToken, policies); if (this.HasIncomingSupportingTokens) { for (int i = 0; i < this.incomingSupportingTokens.Count; ++i) { if (supportingSessionTokenToExclude != null) { SecurityContextSecurityToken sct = this.incomingSupportingTokens[i].SecurityToken as SecurityContextSecurityToken; if (sct != null && sct.ContextId == supportingSessionTokenToExclude.ContextId) { continue; } } SecurityTokenAttachmentMode attachmentMode = this.incomingSupportingTokens[i].SecurityTokenAttachmentMode; // a safety net in case more attachment modes get added to the product without // reviewing this code. if (attachmentMode == SecurityTokenAttachmentMode.Endorsing || attachmentMode == SecurityTokenAttachmentMode.Signed || attachmentMode == SecurityTokenAttachmentMode.SignedEncrypted || attachmentMode == SecurityTokenAttachmentMode.SignedEndorsing) { AddAuthorizationPolicies(this.incomingSupportingTokens[i], policies); } } } return new ReadOnlyCollection (policies); } public void Dispose() { // do no-op for future V2 if (!this.disposed) { this.disposed = true; } } void ThrowIfDisposed() { if (this.disposed) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ObjectDisposedException(this.GetType().FullName)); } } } } // 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
- MessageFormatterConverter.cs
- HttpNamespaceReservationInstallComponent.cs
- SymmetricKey.cs
- CancellationTokenRegistration.cs
- ObjectItemCollection.cs
- ToolstripProfessionalRenderer.cs
- QueryResponse.cs
- ChangeToolStripParentVerb.cs
- WebPartZoneCollection.cs
- WebColorConverter.cs
- GenericPrincipal.cs
- CaseDesigner.xaml.cs
- DependencyPropertyKind.cs
- GestureRecognitionResult.cs
- ErrorInfoXmlDocument.cs
- TextRangeEditLists.cs
- MessageSecurityProtocol.cs
- WebPartEditorOkVerb.cs
- UnsafeNativeMethods.cs
- DoubleLinkListEnumerator.cs
- PriorityQueue.cs
- ContentDisposition.cs
- _NegoState.cs
- PresentationSource.cs
- CompilerState.cs
- PropertyCollection.cs
- CompileXomlTask.cs
- SqlDataSourceFilteringEventArgs.cs
- MetadataCache.cs
- XmlSchemaGroup.cs
- TreeNodeEventArgs.cs
- HttpStreamFormatter.cs
- ChooseAction.cs
- Compiler.cs
- SystemNetHelpers.cs
- SqlDataSourceCache.cs
- Point4DConverter.cs
- RenderCapability.cs
- WsrmMessageInfo.cs
- C14NUtil.cs
- odbcmetadatafactory.cs
- PolygonHotSpot.cs
- DefinitionBase.cs
- OutputCacheEntry.cs
- KeyGestureValueSerializer.cs
- LineServicesRun.cs
- ItemAutomationPeer.cs
- SecurityToken.cs
- ContainerActivationHelper.cs
- PersonalizableAttribute.cs
- DocumentPage.cs
- TranslateTransform3D.cs
- XmlCodeExporter.cs
- TemplatedWizardStep.cs
- OleDbParameter.cs
- XmlHelper.cs
- QilStrConcat.cs
- AuthorizationRuleCollection.cs
- DiagnosticsConfigurationHandler.cs
- DataContractSet.cs
- PipeSecurity.cs
- CompensateDesigner.cs
- GeneralTransform3DTo2D.cs
- StringOutput.cs
- SectionVisual.cs
- Vector.cs
- PropertyDescriptors.cs
- ClipboardProcessor.cs
- arabicshape.cs
- Internal.cs
- XmlValidatingReader.cs
- Privilege.cs
- TransformerConfigurationWizardBase.cs
- ProxyGenerationError.cs
- MessageBox.cs
- ConnectionStringsExpressionEditor.cs
- FontInfo.cs
- Utils.cs
- XmlDigitalSignatureProcessor.cs
- HierarchicalDataBoundControlAdapter.cs
- EventManager.cs
- DataGridColumnHeader.cs
- StringStorage.cs
- ConfigXmlWhitespace.cs
- PropertyDescriptor.cs
- WebDisplayNameAttribute.cs
- CategoryNameCollection.cs
- IsolationInterop.cs
- DiscreteKeyFrames.cs
- DataServiceRequest.cs
- ServiceHostingEnvironment.cs
- SequentialOutput.cs
- DockPatternIdentifiers.cs
- SecondaryIndexList.cs
- RequestTimeoutManager.cs
- RenderOptions.cs
- DetectRunnableInstancesTask.cs
- MarshalByRefObject.cs
- ShaderEffect.cs
- CodeParameterDeclarationExpression.cs