public void AddToReadOnly()
        {
            ChannelProtectionRequirements r =
                new ChannelProtectionRequirements();

            r.MakeReadOnly();
            r.Add(new ChannelProtectionRequirements());
        }
Beispiel #2
0
        static SecureConversationSecurityTokenParameters()
        {
            ChannelProtectionRequirements r =
                new ChannelProtectionRequirements();

            r.IncomingSignatureParts.ChannelParts.IsBodyIncluded  = true;
            r.OutgoingSignatureParts.ChannelParts.IsBodyIncluded  = true;
            r.IncomingEncryptionParts.ChannelParts.IsBodyIncluded = true;
            r.OutgoingEncryptionParts.ChannelParts.IsBodyIncluded = true;
            r.MakeReadOnly();
            default_channel_protection_requirements = r;

            dummy_context = new BindingContext(
                new CustomBinding(),
                new BindingParameterCollection());
        }
Beispiel #3
0
        internal static ChannelProtectionRequirements GetChannelProtectionRequirements(ProtectionLevel protectionLevel)
        {
            ChannelProtectionRequirements result;

            if (protectionLevel == ProtectionLevel.EncryptAndSign)
            {
                if (encryptAndSignChannelProtectionRequirements == null)
                {
                    MessagePartSpecification header = new MessagePartSpecification();
                    header.HeaderTypes.Add(new XmlQualifiedName(CallbackContextHeaderName, CallbackContextHeaderNamespace));
                    ChannelProtectionRequirements requirements = new ChannelProtectionRequirements();
                    requirements.IncomingSignatureParts.AddParts(header);
                    requirements.IncomingEncryptionParts.AddParts(header);
                    requirements.OutgoingSignatureParts.AddParts(header);
                    requirements.OutgoingEncryptionParts.AddParts(header);
                    requirements.MakeReadOnly();
                    encryptAndSignChannelProtectionRequirements = requirements;
                }
                result = encryptAndSignChannelProtectionRequirements;
            }
            else if (protectionLevel == ProtectionLevel.Sign)
            {
                if (signChannelProtectionRequirements == null)
                {
                    MessagePartSpecification header = new MessagePartSpecification();
                    header.HeaderTypes.Add(new XmlQualifiedName(CallbackContextHeaderName, CallbackContextHeaderNamespace));
                    ChannelProtectionRequirements requirements = new ChannelProtectionRequirements();
                    requirements.IncomingSignatureParts.AddParts(header);
                    requirements.OutgoingSignatureParts.AddParts(header);
                    requirements.MakeReadOnly();
                    signChannelProtectionRequirements = requirements;
                }
                result = signChannelProtectionRequirements;
            }
            else
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("protectionLevel"));
            }

            return(result);
        }
Beispiel #4
0
        /// <summary>
        /// Adds the requirement telling WCF to encrypt the body of RM messages
        /// </summary>
        private void AddProtectionRequirements(BindingParameterCollection bindingParameters)
        {
            logging.WCFLogger.Write(System.Diagnostics.TraceEventType.Start, "Custom header signing behavior adding protection requirements");


            // Get the protection requirements for the binding
            ChannelProtectionRequirements cpr = bindingParameters.Find <ChannelProtectionRequirements>();

            // If there were no requirements since before, create them
            if (cpr == null)
            {
                cpr = new ChannelProtectionRequirements();
                bindingParameters.Add(cpr);
            }

            // Select the headers to be affected by this behavior
            MessagePartSpecification headerMessagePart = new MessagePartSpecification(_headers.ToArray());

            headerMessagePart.MakeReadOnly();
            ChannelProtectionRequirements newCpr = new ChannelProtectionRequirements();

            // Specify each header to be signed
            foreach (string action in actionsToWhichThisBehaviorApplies)
            {
                newCpr.IncomingSignatureParts.AddParts(headerMessagePart, action);
                newCpr.OutgoingSignatureParts.AddParts(headerMessagePart, action);
            }

            newCpr.MakeReadOnly();
            cpr.Add(newCpr);


            // Tracing
            foreach (XmlQualifiedName name in _headers)
            {
                logging.WCFLogger.Write(System.Diagnostics.TraceEventType.Information, "Header '" + name + "' added for signing");
            }
            logging.WCFLogger.Write(System.Diagnostics.TraceEventType.Stop, "Custom header signing behavior finished adding protection requirements");
        }
 internal static ChannelProtectionRequirements GetChannelProtectionRequirements(ProtectionLevel protectionLevel)
 {
     if (protectionLevel == ProtectionLevel.EncryptAndSign)
     {
         if (encryptAndSignChannelProtectionRequirements == null)
         {
             MessagePartSpecification parts = new MessagePartSpecification {
                 HeaderTypes = { new XmlQualifiedName("Context", "http://schemas.microsoft.com/ws/2006/05/context") }
             };
             ChannelProtectionRequirements requirements2 = new ChannelProtectionRequirements();
             requirements2.IncomingSignatureParts.AddParts(parts);
             requirements2.IncomingEncryptionParts.AddParts(parts);
             requirements2.OutgoingSignatureParts.AddParts(parts);
             requirements2.OutgoingEncryptionParts.AddParts(parts);
             requirements2.MakeReadOnly();
             encryptAndSignChannelProtectionRequirements = requirements2;
         }
         return(encryptAndSignChannelProtectionRequirements);
     }
     if (protectionLevel != ProtectionLevel.Sign)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("protectionLevel"));
     }
     if (signChannelProtectionRequirements == null)
     {
         MessagePartSpecification specification2 = new MessagePartSpecification {
             HeaderTypes = { new XmlQualifiedName("Context", "http://schemas.microsoft.com/ws/2006/05/context") }
         };
         ChannelProtectionRequirements requirements3 = new ChannelProtectionRequirements();
         requirements3.IncomingSignatureParts.AddParts(specification2);
         requirements3.OutgoingSignatureParts.AddParts(specification2);
         requirements3.MakeReadOnly();
         signChannelProtectionRequirements = requirements3;
     }
     return(signChannelProtectionRequirements);
 }