Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / MessageSecurityProtocolFactory.cs / 1 / MessageSecurityProtocolFactory.cs
//---------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Security { using System.Collections.Generic; using System.ServiceModel; using System.IO; using System.IdentityModel.Claims; using System.IdentityModel.Policy; using System.IdentityModel.Selectors; using System.Security.Cryptography; using System.ServiceModel.Channels; using System.ServiceModel.Security.Tokens; using System.Text; using System.Xml; using System.Xml.Serialization; using System.Runtime.Serialization; using System.Net.Security; abstract class MessageSecurityProtocolFactory : SecurityProtocolFactory { internal const MessageProtectionOrder defaultMessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt; internal const bool defaultDoRequestSignatureConfirmation = false; bool applyIntegrity = true; bool applyConfidentiality = true; bool doRequestSignatureConfirmation = defaultDoRequestSignatureConfirmation; IdentityVerifier identityVerifier; ChannelProtectionRequirements protectionRequirements = new ChannelProtectionRequirements(); MessageProtectionOrder messageProtectionOrder = defaultMessageProtectionOrder; bool requireIntegrity = true; bool requireConfidentiality = true; ListwrappedKeyTokenAuthenticator; protected MessageSecurityProtocolFactory() { } internal MessageSecurityProtocolFactory(MessageSecurityProtocolFactory factory) : base(factory) { if (factory == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("factory"); this.applyIntegrity = factory.applyIntegrity; this.applyConfidentiality = factory.applyConfidentiality; this.identityVerifier = factory.identityVerifier; this.protectionRequirements = new ChannelProtectionRequirements(factory.protectionRequirements); this.messageProtectionOrder = factory.messageProtectionOrder; this.requireIntegrity = factory.requireIntegrity; this.requireConfidentiality = factory.requireConfidentiality; this.doRequestSignatureConfirmation = factory.doRequestSignatureConfirmation; } public bool ApplyConfidentiality { get { return this.applyConfidentiality; } set { ThrowIfImmutable(); this.applyConfidentiality = value; } } public bool ApplyIntegrity { get { return this.applyIntegrity; } set { ThrowIfImmutable(); this.applyIntegrity = value; } } public bool DoRequestSignatureConfirmation { get { return this.doRequestSignatureConfirmation; } set { ThrowIfImmutable(); this.doRequestSignatureConfirmation = value; } } public IdentityVerifier IdentityVerifier { get { return this.identityVerifier; } set { ThrowIfImmutable(); this.identityVerifier = value; } } public ChannelProtectionRequirements ProtectionRequirements { get { return this.protectionRequirements; } } public MessageProtectionOrder MessageProtectionOrder { get { return this.messageProtectionOrder; } set { ThrowIfImmutable(); this.messageProtectionOrder = value; } } public bool RequireIntegrity { get { return this.requireIntegrity; } set { ThrowIfImmutable(); this.requireIntegrity = value; } } public bool RequireConfidentiality { get { return this.requireConfidentiality; } set { ThrowIfImmutable(); this.requireConfidentiality = value; } } internal List WrappedKeySecurityTokenAuthenticator { get { return this.wrappedKeyTokenAuthenticator; } } protected virtual void ValidateCorrelationSecuritySettings() { if (this.ActAsInitiator && this.SupportsRequestReply) { bool savesCorrelationTokenOnRequest = this.ApplyIntegrity || this.ApplyConfidentiality; bool needsCorrelationTokenOnReply = this.RequireIntegrity || this.RequireConfidentiality; if (!savesCorrelationTokenOnRequest && needsCorrelationTokenOnReply) { OnPropertySettingsError("ApplyIntegrity", false); } } } public override void OnOpen(TimeSpan timeout) { base.OnOpen(timeout); this.protectionRequirements.MakeReadOnly(); if (this.DetectReplays && !this.RequireIntegrity) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("RequireIntegrity", SR.GetString(SR.ForReplayDetectionToBeDoneRequireIntegrityMustBeSet)); } if (this.DoRequestSignatureConfirmation) { if (!this.SupportsRequestReply) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument(SR.GetString(SR.SignatureConfirmationRequiresRequestReply)); } if (!this.StandardsManager.SecurityVersion.SupportsSignatureConfirmation) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument(SR.GetString(SR.SecurityVersionDoesNotSupportSignatureConfirmation, this.StandardsManager.SecurityVersion)); } } this.wrappedKeyTokenAuthenticator = new List (1); SecurityTokenAuthenticator authenticator = new NonValidatingSecurityTokenAuthenticator (); this.wrappedKeyTokenAuthenticator.Add(authenticator); ValidateCorrelationSecuritySettings(); } static MessagePartSpecification ExtractMessageParts(string action, ScopedMessagePartSpecification scopedParts, bool isForSignature) { MessagePartSpecification parts = null; if (scopedParts.TryGetParts(action, out parts)) { return parts; } else if (scopedParts.TryGetParts(MessageHeaders.WildcardAction, out parts)) { return parts; } // send back a fault indication that the action is unknown SecurityVersion wss = MessageSecurityVersion.Default.SecurityVersion; FaultCode subCode = new FaultCode(wss.InvalidSecurityFaultCode.Value, wss.HeaderNamespace.Value); FaultCode senderCode = FaultCode.CreateSenderFaultCode(subCode); FaultReason reason = new FaultReason(SR.GetString(SR.InvalidOrUnrecognizedAction, action), System.Globalization.CultureInfo.CurrentCulture); MessageFault fault = MessageFault.CreateFault(senderCode, reason); if (isForSignature) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.GetString(SR.NoSignaturePartsSpecified, action), null, fault)); } else { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.GetString(SR.NoEncryptionPartsSpecified, action), null, fault)); } } internal MessagePartSpecification GetIncomingEncryptionParts(string action) { if (this.RequireConfidentiality) { //return ExtractMessageParts(action, (this.SecurityTokenManager is ClientCredentialsSecurityTokenManager) ? this.ProtectionRequirements.OutgoingEncryptionParts : this.ProtectionRequirements.IncomingEncryptionParts, false); if ( this.IsDuplexReply ) return ExtractMessageParts(action, this.ProtectionRequirements.OutgoingEncryptionParts , false); else return ExtractMessageParts(action, (this.ActAsInitiator) ? this.ProtectionRequirements.OutgoingEncryptionParts : this.ProtectionRequirements.IncomingEncryptionParts, false); } else { return MessagePartSpecification.NoParts; } } internal MessagePartSpecification GetIncomingSignatureParts(string action) { if (this.RequireIntegrity) { //return ExtractMessageParts(action, (this.SecurityTokenManager is ClientCredentialsSecurityTokenManager) ? this.ProtectionRequirements.OutgoingSignatureParts : this.ProtectionRequirements.IncomingSignatureParts, true); if ( this.IsDuplexReply ) return ExtractMessageParts(action, this.ProtectionRequirements.OutgoingSignatureParts, true); else return ExtractMessageParts(action, (this.ActAsInitiator) ? this.ProtectionRequirements.OutgoingSignatureParts : this.ProtectionRequirements.IncomingSignatureParts, true); } else { return MessagePartSpecification.NoParts; } } internal MessagePartSpecification GetOutgoingEncryptionParts(string action) { if (this.ApplyConfidentiality) { //return ExtractMessageParts(action, (this.SecurityTokenManager is ClientCredentialsSecurityTokenManager) ? this.ProtectionRequirements.IncomingEncryptionParts : this.ProtectionRequirements.OutgoingEncryptionParts, false); if ( this.IsDuplexReply ) return ExtractMessageParts(action, this.ProtectionRequirements.OutgoingEncryptionParts, false); else return ExtractMessageParts(action, (this.ActAsInitiator) ? this.ProtectionRequirements.IncomingEncryptionParts : this.ProtectionRequirements.OutgoingEncryptionParts, false); } else { return MessagePartSpecification.NoParts; } } internal MessagePartSpecification GetOutgoingSignatureParts(string action) { if (this.ApplyIntegrity) { //return ExtractMessageParts(action, (this.SecurityTokenManager is ClientCredentialsSecurityTokenManager) ? this.ProtectionRequirements.IncomingSignatureParts : this.ProtectionRequirements.OutgoingSignatureParts, true); if ( this.IsDuplexReply ) return ExtractMessageParts(action, this.ProtectionRequirements.OutgoingSignatureParts, true); else return ExtractMessageParts(action, (this.ActAsInitiator) ? this.ProtectionRequirements.IncomingSignatureParts : this.ProtectionRequirements.OutgoingSignatureParts, true); } else { return MessagePartSpecification.NoParts; } } } } // 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
- FieldToken.cs
- DescendentsWalkerBase.cs
- DrawingAttributeSerializer.cs
- DbTransaction.cs
- Enum.cs
- FrameworkElementFactoryMarkupObject.cs
- NoPersistProperty.cs
- MemberDomainMap.cs
- StylusEditingBehavior.cs
- MissingMemberException.cs
- Number.cs
- WebPartConnection.cs
- ArgumentNullException.cs
- MultiDataTrigger.cs
- DiagnosticTrace.cs
- SchemaObjectWriter.cs
- RegexBoyerMoore.cs
- UserControlBuildProvider.cs
- EntityViewGenerationAttribute.cs
- Compilation.cs
- RequestNavigateEventArgs.cs
- MetadataItemEmitter.cs
- GlyphRunDrawing.cs
- ScrollViewer.cs
- CodeDomComponentSerializationService.cs
- DataGridViewRowCollection.cs
- DeclarativeConditionsCollection.cs
- BinaryObjectInfo.cs
- OleDbSchemaGuid.cs
- Constant.cs
- OutputScopeManager.cs
- DataGridViewLinkColumn.cs
- SectionUpdates.cs
- ContentPropertyAttribute.cs
- BrushMappingModeValidation.cs
- DrawingBrush.cs
- RuleConditionDialog.cs
- WindowPattern.cs
- IISMapPath.cs
- HelpProvider.cs
- DynamicDiscoSearcher.cs
- AdapterDictionary.cs
- WebPartMenuStyle.cs
- AppDomain.cs
- ValidationErrorEventArgs.cs
- ToggleButtonAutomationPeer.cs
- BmpBitmapEncoder.cs
- xmlfixedPageInfo.cs
- smtpconnection.cs
- DataGridColumnHeader.cs
- SecurityException.cs
- ConnectionStringSettings.cs
- SemanticValue.cs
- WindowsClaimSet.cs
- InteropTrackingRecord.cs
- VisualStyleElement.cs
- CSharpCodeProvider.cs
- DBDataPermission.cs
- Visual3DCollection.cs
- _DigestClient.cs
- HttpApplicationFactory.cs
- WaitForChangedResult.cs
- CommandManager.cs
- RectangleHotSpot.cs
- DataControlField.cs
- WebPartConnectionsConnectVerb.cs
- NonParentingControl.cs
- AuthenticationModulesSection.cs
- HebrewCalendar.cs
- VersionPair.cs
- XmlSerializer.cs
- DataServiceQueryContinuation.cs
- RequestStatusBarUpdateEventArgs.cs
- MinMaxParagraphWidth.cs
- JournalEntryListConverter.cs
- WindowsAuthenticationEventArgs.cs
- EdmToObjectNamespaceMap.cs
- ExceptionRoutedEventArgs.cs
- UnsafeCollabNativeMethods.cs
- XmlObjectSerializerReadContextComplex.cs
- StaticExtensionConverter.cs
- SqlDataSourceCache.cs
- Positioning.cs
- XmlDigitalSignatureProcessor.cs
- X509Utils.cs
- RelationshipFixer.cs
- FacetDescription.cs
- BindingValueChangedEventArgs.cs
- ConsoleKeyInfo.cs
- GridItemProviderWrapper.cs
- AuthenticationServiceManager.cs
- WebPartConnectVerb.cs
- SqlHelper.cs
- HtmlUtf8RawTextWriter.cs
- EmptyControlCollection.cs
- HtmlTableRowCollection.cs
- ScriptingSectionGroup.cs
- BitmapFrameDecode.cs
- HttpServerVarsCollection.cs
- NameValuePair.cs