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
- RemoteWebConfigurationHost.cs
- IndexedEnumerable.cs
- MouseGesture.cs
- Char.cs
- Input.cs
- FixedTextSelectionProcessor.cs
- StatusStrip.cs
- ResourceIDHelper.cs
- IImplicitResourceProvider.cs
- HttpModuleCollection.cs
- DataExpression.cs
- LabelEditEvent.cs
- Inflater.cs
- RoutedEventArgs.cs
- sapiproxy.cs
- XPathMultyIterator.cs
- DataTableTypeConverter.cs
- _TLSstream.cs
- XmlSerializerSection.cs
- Ops.cs
- GACMembershipCondition.cs
- DataTableMapping.cs
- CheckPair.cs
- FrameworkElementAutomationPeer.cs
- exports.cs
- TypeListConverter.cs
- ServiceAppDomainAssociationProvider.cs
- QilStrConcat.cs
- OutputCacheProfileCollection.cs
- PageStatePersister.cs
- XDRSchema.cs
- EntityModelBuildProvider.cs
- CodeSubDirectory.cs
- InternalsVisibleToAttribute.cs
- DeploymentSection.cs
- XsdBuildProvider.cs
- GradientBrush.cs
- XXXInfos.cs
- UpdatePanelTrigger.cs
- DataGridViewRowEventArgs.cs
- XamlRtfConverter.cs
- MeasurementDCInfo.cs
- SqlBulkCopyColumnMappingCollection.cs
- AsyncOperationLifetimeManager.cs
- HandoffBehavior.cs
- Operand.cs
- DataServiceEntityAttribute.cs
- CodeNamespace.cs
- SqlServer2KCompatibilityCheck.cs
- ExpressionReplacer.cs
- FigureHelper.cs
- Root.cs
- SecurityUtils.cs
- SecurityContextTokenCache.cs
- InputLanguageSource.cs
- Rotation3DAnimation.cs
- XmlSchema.cs
- EllipseGeometry.cs
- TokenFactoryFactory.cs
- ReadOnlyCollection.cs
- QueryCursorEventArgs.cs
- Emitter.cs
- AddInProcess.cs
- HashMembershipCondition.cs
- GridSplitter.cs
- IncrementalReadDecoders.cs
- Bitmap.cs
- HttpStreamXmlDictionaryWriter.cs
- KeyFrames.cs
- DeploymentSectionCache.cs
- EventManager.cs
- QilParameter.cs
- LocalIdKeyIdentifierClause.cs
- XslCompiledTransform.cs
- ToolStripItemImageRenderEventArgs.cs
- OdbcStatementHandle.cs
- PropertyTab.cs
- MultiSelectRootGridEntry.cs
- SortableBindingList.cs
- HandleRef.cs
- BitSet.cs
- WebBrowserHelper.cs
- TextEditorTyping.cs
- Suspend.cs
- DataSourceXmlSerializer.cs
- Menu.cs
- CodeIterationStatement.cs
- DataSourceHelper.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- BCryptNative.cs
- Decimal.cs
- BoundField.cs
- ProfileService.cs
- NegationPusher.cs
- FocusChangedEventArgs.cs
- TdsParserSafeHandles.cs
- CompletedAsyncResult.cs
- sqlpipe.cs
- CollectionBase.cs
- ISCIIEncoding.cs