Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / AcceptorSessionSymmetricTransportSecurityProtocol.cs / 1 / AcceptorSessionSymmetricTransportSecurityProtocol.cs
//---------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Security { using System.Collections.Generic; using System.ServiceModel; using System.ServiceModel.Description; using System.Collections.ObjectModel; using System.IO; using System.IdentityModel.Tokens; using System.IdentityModel.Selectors; using System.IdentityModel.Claims; using System.IdentityModel.Policy; using System.Security.Cryptography; using System.ServiceModel.Security.Tokens; using System.ServiceModel.Channels; using System.Runtime.InteropServices; using System.Text; using System.Xml; using System.Xml.Serialization; sealed class AcceptorSessionSymmetricTransportSecurityProtocol : TransportSecurityProtocol, IAcceptorSecuritySessionProtocol { SecurityToken outgoingSessionToken; SecurityTokenAuthenticator sessionTokenAuthenticator; SecurityTokenResolver sessionTokenResolver; ReadOnlyCollectionsessionTokenResolverList; UniqueId sessionId; Collection sessionTokenAuthenticatorSpecificationList; bool requireDerivedKeys; public AcceptorSessionSymmetricTransportSecurityProtocol(SessionSymmetricTransportSecurityProtocolFactory factory) : base(factory, null, null) { if (factory.ActAsInitiator == true) { DiagnosticUtility.DebugAssert("This protocol can only be used at the recipient."); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.ProtocolMustBeRecipient, this.GetType().ToString()))); } this.requireDerivedKeys = factory.SecurityTokenParameters.RequireDerivedKeys; } SessionSymmetricTransportSecurityProtocolFactory Factory { get { return (SessionSymmetricTransportSecurityProtocolFactory)this.SecurityProtocolFactory; } } public bool ReturnCorrelationState { get { return false; } set { } } public void SetSessionTokenAuthenticator(UniqueId sessionId, SecurityTokenAuthenticator sessionTokenAuthenticator, SecurityTokenResolver sessionTokenResolver) { this.CommunicationObject.ThrowIfDisposedOrImmutable(); this.sessionId = sessionId; this.sessionTokenResolver = sessionTokenResolver; Collection tmp = new Collection (); tmp.Add(this.sessionTokenResolver); this.sessionTokenResolverList = new ReadOnlyCollection (tmp); this.sessionTokenAuthenticator = sessionTokenAuthenticator; SupportingTokenAuthenticatorSpecification spec = new SupportingTokenAuthenticatorSpecification(this.sessionTokenAuthenticator, this.sessionTokenResolver, SecurityTokenAttachmentMode.Endorsing, this.Factory.SecurityTokenParameters); this.sessionTokenAuthenticatorSpecificationList = new Collection (); this.sessionTokenAuthenticatorSpecificationList.Add(spec); } public SecurityToken GetOutgoingSessionToken() { return this.outgoingSessionToken; } public void SetOutgoingSessionToken(SecurityToken token) { if (token == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("token"); } this.outgoingSessionToken = token; } protected override void VerifyIncomingMessageCore(ref Message message, TimeSpan timeout) { string actor = string.Empty; // message.Version.Envelope.UltimateDestinationActor; ReceiveSecurityHeader securityHeader = this.Factory.StandardsManager.CreateReceiveSecurityHeader(message, actor, this.Factory.IncomingAlgorithmSuite, MessageDirection.Input); securityHeader.RequireMessageProtection = false; securityHeader.ReaderQuotas = this.Factory.SecurityBindingElement.ReaderQuotas; IList supportingAuthenticators = GetSupportingTokenAuthenticatorsAndSetExpectationFlags(this.Factory, message, securityHeader); ReadOnlyCollection mergedTokenResolvers = MergeOutOfBandResolvers(supportingAuthenticators, this.sessionTokenResolverList); if (supportingAuthenticators != null && supportingAuthenticators.Count > 0) { supportingAuthenticators = new List (supportingAuthenticators); supportingAuthenticators.Insert(0, this.sessionTokenAuthenticatorSpecificationList[0]); } else { supportingAuthenticators = this.sessionTokenAuthenticatorSpecificationList; } securityHeader.ConfigureTransportBindingServerReceiveHeader(supportingAuthenticators); securityHeader.ConfigureOutOfBandTokenResolver(mergedTokenResolvers); securityHeader.ExpectEndorsingTokens = true; TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); securityHeader.SetTimeParameters(this.Factory.NonceCache, this.Factory.ReplayWindow, this.Factory.MaxClockSkew); // do not enforce key derivation requirement for Cancel messages due to WSE interop securityHeader.EnforceDerivedKeyRequirement = (message.Headers.Action != this.Factory.StandardsManager.SecureConversationDriver.CloseAction.Value); securityHeader.Process(timeoutHelper.RemainingTime()); if (securityHeader.Timestamp == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new MessageSecurityException(SR.GetString(SR.RequiredTimestampMissingInSecurityHeader))); } bool didSessionSctEndorse = false; if (securityHeader.EndorsingSupportingTokens != null) { for (int i = 0; i < securityHeader.EndorsingSupportingTokens.Count; ++i) { SecurityContextSecurityToken signingSct = (securityHeader.EndorsingSupportingTokens[i] as SecurityContextSecurityToken); if (signingSct != null && signingSct.ContextId == this.sessionId) { didSessionSctEndorse = true; break; } } } if (!didSessionSctEndorse) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new MessageSecurityException(SR.GetString(SR.NoSessionTokenPresentInMessage))); } message = securityHeader.ProcessedMessage; AttachRecipientSecurityProperty(message, securityHeader.BasicSupportingTokens, securityHeader.EndorsingSupportingTokens, securityHeader.SignedEndorsingSupportingTokens, securityHeader.SignedSupportingTokens, securityHeader.SecurityTokenAuthorizationPoliciesMapping); base.OnIncomingMessageVerified(message); } } } // 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
- ProcessInputEventArgs.cs
- AutoResetEvent.cs
- ToolStripCustomTypeDescriptor.cs
- CustomAttributeSerializer.cs
- TemplatePartAttribute.cs
- panel.cs
- ResourcesBuildProvider.cs
- ExpandableObjectConverter.cs
- MatrixConverter.cs
- PrintControllerWithStatusDialog.cs
- JapaneseCalendar.cs
- Sentence.cs
- Mouse.cs
- SwitchElementsCollection.cs
- StrokeCollectionConverter.cs
- XPathBuilder.cs
- MatchAttribute.cs
- HttpPostedFileWrapper.cs
- ItemType.cs
- TextReturnReader.cs
- GridViewDeleteEventArgs.cs
- ComponentSerializationService.cs
- StoreItemCollection.cs
- RemoteWebConfigurationHostServer.cs
- WMIInterop.cs
- Configuration.cs
- DelegateTypeInfo.cs
- Contracts.cs
- HostExecutionContextManager.cs
- Parser.cs
- DependencyPropertyChangedEventArgs.cs
- MexNamedPipeBindingElement.cs
- HtmlInputHidden.cs
- XPathNavigator.cs
- ToolboxItemWrapper.cs
- ConfigurationStrings.cs
- ToolboxItemSnapLineBehavior.cs
- TemplateColumn.cs
- XmlBuffer.cs
- WebZone.cs
- TripleDES.cs
- RotateTransform.cs
- WebScriptServiceHost.cs
- TimeIntervalCollection.cs
- ProxyAttribute.cs
- TextServicesCompartment.cs
- DocumentReferenceCollection.cs
- Mutex.cs
- Hex.cs
- Border.cs
- ClientScriptManagerWrapper.cs
- HtmlUtf8RawTextWriter.cs
- FilteredXmlReader.cs
- ViewBox.cs
- FormsAuthenticationConfiguration.cs
- CodeDelegateCreateExpression.cs
- HMACSHA256.cs
- CqlWriter.cs
- TriState.cs
- ManualResetEventSlim.cs
- LogSwitch.cs
- _Connection.cs
- ConfigurationFileMap.cs
- GeometryGroup.cs
- MaterialGroup.cs
- CellParagraph.cs
- SiteMapDataSource.cs
- UpdatePanelControlTrigger.cs
- InternalBufferManager.cs
- CachedResourceDictionaryExtension.cs
- ObjectDataSourceDisposingEventArgs.cs
- SerialPinChanges.cs
- _DisconnectOverlappedAsyncResult.cs
- PublishLicense.cs
- RenderOptions.cs
- ReflectionUtil.cs
- CompositeActivityTypeDescriptor.cs
- DatatypeImplementation.cs
- BitmapEffectvisualstate.cs
- ParallelDesigner.cs
- HelpKeywordAttribute.cs
- HttpHandlerActionCollection.cs
- Int32AnimationBase.cs
- XmlSerializerOperationFormatter.cs
- ReflectPropertyDescriptor.cs
- ZoneMembershipCondition.cs
- GuidTagList.cs
- FillErrorEventArgs.cs
- HttpProfileBase.cs
- DataSourceCache.cs
- DocumentViewerBase.cs
- UniqueIdentifierService.cs
- EntityDataSourceDataSelectionPanel.designer.cs
- ListControlDataBindingHandler.cs
- Marshal.cs
- KeyGestureValueSerializer.cs
- DataServiceQuery.cs
- TreeViewEvent.cs
- BackgroundFormatInfo.cs
- Bitmap.cs