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
- RtfFormatStack.cs
- WriteableBitmap.cs
- _TLSstream.cs
- OleDbMetaDataFactory.cs
- LogicalTreeHelper.cs
- _Connection.cs
- FrameworkRichTextComposition.cs
- CssStyleCollection.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- EmptyStringExpandableObjectConverter.cs
- TableColumn.cs
- ListViewAutomationPeer.cs
- ProtectedProviderSettings.cs
- IPipelineRuntime.cs
- securestring.cs
- RoutingConfiguration.cs
- DataObject.cs
- DiscoveryEndpointValidator.cs
- GlyphInfoList.cs
- Storyboard.cs
- FormViewInsertedEventArgs.cs
- XamlTypeMapperSchemaContext.cs
- WizardPanel.cs
- SqlVersion.cs
- RC2.cs
- FontEditor.cs
- DependencyProperty.cs
- DesignerVerbCollection.cs
- GridView.cs
- LayoutEditorPart.cs
- ProvidersHelper.cs
- TrackingRecordPreFilter.cs
- DBConcurrencyException.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- GrammarBuilderRuleRef.cs
- DataGridViewRowsAddedEventArgs.cs
- TransportConfigurationTypeElement.cs
- ProtocolsConfigurationHandler.cs
- QilFactory.cs
- ContentValidator.cs
- DataGridPagerStyle.cs
- MediaPlayerState.cs
- ToolStripContentPanel.cs
- PersonalizationProviderHelper.cs
- WindowShowOrOpenTracker.cs
- KnownTypes.cs
- AccessDataSourceWizardForm.cs
- WebConfigurationFileMap.cs
- LogicalExpressionTypeConverter.cs
- EncoderParameter.cs
- LineBreak.cs
- designeractionbehavior.cs
- Literal.cs
- DbParameterCollectionHelper.cs
- ColumnCollection.cs
- StyleCollection.cs
- HtmlHistory.cs
- ProcessDesigner.cs
- ExpressionBuilderCollection.cs
- WsdlBuildProvider.cs
- ADMembershipUser.cs
- CompiledRegexRunner.cs
- ContentType.cs
- Matrix.cs
- TypeUnloadedException.cs
- ReferenceEqualityComparer.cs
- EpmCustomContentWriterNodeData.cs
- PtsCache.cs
- StrongNameMembershipCondition.cs
- TransformerInfo.cs
- FrameworkContextData.cs
- ClientScriptManagerWrapper.cs
- WhitespaceSignificantCollectionAttribute.cs
- WinFormsSecurity.cs
- _emptywebproxy.cs
- OracleDateTime.cs
- DataGridViewCellFormattingEventArgs.cs
- SequenceDesignerAccessibleObject.cs
- _OverlappedAsyncResult.cs
- DoubleMinMaxAggregationOperator.cs
- ClipboardData.cs
- XmlRootAttribute.cs
- MsmqIntegrationOutputChannel.cs
- InkPresenter.cs
- ProxyGenerationError.cs
- DrawingServices.cs
- TemplateControlParser.cs
- ControlValuePropertyAttribute.cs
- PenThreadPool.cs
- ContextStaticAttribute.cs
- WebPartRestoreVerb.cs
- QilFunction.cs
- ServiceControllerDesigner.cs
- Rotation3DKeyFrameCollection.cs
- ResetableIterator.cs
- X509SecurityTokenAuthenticator.cs
- SessionEndedEventArgs.cs
- NestedContainer.cs
- RenderDataDrawingContext.cs
- HitTestDrawingContextWalker.cs