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
- Property.cs
- BitmapDownload.cs
- DesignerToolboxInfo.cs
- SecurityVerifiedMessage.cs
- SmiEventStream.cs
- QueryStringParameter.cs
- CodeVariableDeclarationStatement.cs
- TemplatePropertyEntry.cs
- SelectionBorderGlyph.cs
- COM2ExtendedUITypeEditor.cs
- CachedTypeface.cs
- ExpressionBuilder.cs
- ServiceMemoryGates.cs
- QilDataSource.cs
- ConvertTextFrag.cs
- FlowDocumentView.cs
- JsonStringDataContract.cs
- DrawingState.cs
- StructuralType.cs
- Control.cs
- VectorCollectionValueSerializer.cs
- ToolBarTray.cs
- GridViewRowCollection.cs
- PageParserFilter.cs
- SafeFileMappingHandle.cs
- TrackingMemoryStreamFactory.cs
- Selector.cs
- InstancePersistenceCommand.cs
- keycontainerpermission.cs
- WsdlParser.cs
- GridViewActionList.cs
- ParameterCollectionEditorForm.cs
- LocatorGroup.cs
- ProfileModule.cs
- DesignTimeVisibleAttribute.cs
- IProducerConsumerCollection.cs
- CodeActivityMetadata.cs
- OlePropertyStructs.cs
- StopStoryboard.cs
- FileUpload.cs
- SignedInfo.cs
- EntitySqlQueryCacheEntry.cs
- FullTextBreakpoint.cs
- UnsafeNativeMethods.cs
- WebEventTraceProvider.cs
- InstanceCreationEditor.cs
- CodeGeneratorOptions.cs
- SystemResourceHost.cs
- XamlClipboardData.cs
- SiteMapNodeItem.cs
- TextServicesLoader.cs
- ColumnWidthChangedEvent.cs
- NetworkAddressChange.cs
- TlsnegoTokenAuthenticator.cs
- ArrayMergeHelper.cs
- InputLanguageProfileNotifySink.cs
- AppSettingsExpressionBuilder.cs
- DocumentDesigner.cs
- CompilerScope.Storage.cs
- GridEntry.cs
- ControlUtil.cs
- DrawingBrush.cs
- PointAnimationUsingKeyFrames.cs
- Win32MouseDevice.cs
- PagePropertiesChangingEventArgs.cs
- PDBReader.cs
- SqlDependencyUtils.cs
- COM2PropertyDescriptor.cs
- SafeCertificateStore.cs
- SByteStorage.cs
- FontNamesConverter.cs
- TimeEnumHelper.cs
- DesignBinding.cs
- TypeUtil.cs
- XmlSchemaSequence.cs
- ExpressionEditorSheet.cs
- QuaternionAnimation.cs
- DataTable.cs
- NativeMethods.cs
- FileCodeGroup.cs
- BufferedGraphicsContext.cs
- PixelFormats.cs
- DataGridView.cs
- GridProviderWrapper.cs
- SubMenuStyleCollection.cs
- FileDialog.cs
- DataGridViewCellCancelEventArgs.cs
- FactoryGenerator.cs
- TimelineCollection.cs
- CodeGenerationManager.cs
- WebPartTransformerAttribute.cs
- AdvancedBindingEditor.cs
- AuthenticodeSignatureInformation.cs
- MarkupExtensionParser.cs
- WebBrowserNavigatingEventHandler.cs
- SQLByte.cs
- NullableConverter.cs
- MessagePropertyVariants.cs
- ObjectManager.cs
- AsymmetricKeyExchangeFormatter.cs