BuildChannelListenerCore <TChannel> (
            BindingContext context)
        {
            if (InitiatorTokenParameters == null)
            {
                throw new InvalidOperationException("InitiatorTokenParameters must be set before building channel factory.");
            }
            if (RecipientTokenParameters == null)
            {
                throw new InvalidOperationException("RecipientTokenParameters must be set before building channel factory.");
            }

            SetIssuerBindingContextIfRequired(InitiatorTokenParameters, context);
            SetIssuerBindingContextIfRequired(RecipientTokenParameters, context);

            ServiceCredentials cred = context.BindingParameters.Find <ServiceCredentials> ();

            if (cred == null)
            {
                // it happens when there is no ChannelFactory<T>.
                cred = new ServiceCredentials();
            }
            ServiceCredentialsSecurityTokenManager manager      = (ServiceCredentialsSecurityTokenManager)cred.CreateSecurityTokenManager();
            ChannelProtectionRequirements          requirements =
                context.BindingParameters.Find <ChannelProtectionRequirements> ();

            return(new SecurityChannelListener <TChannel> (
                       context.BuildInnerChannelListener <TChannel> (), new RecipientMessageSecurityBindingSupport(GetCapabilities(), manager, requirements)));
        }
        public void DefaultValues()
        {
            MyParameters p = new MyParameters();

            Assert.IsNull(p.BootstrapSecurityBindingElement, "#1-1");
            Assert.IsNotNull(p.BootstrapProtectionRequirements, "#1-2");
            Assert.AreEqual(true, p.RequireCancellation, "#1-3");

            Assert.AreEqual(false, p.Asym, "#1-4");
            // they cause NRE on winfx, likely a bug.
            //Assert.AreEqual (true, p.Client, "#1-5");
            //Assert.AreEqual (true, p.Win, "#1-6");
            //Assert.AreEqual (true, p.Server, "#1-7");

            p = new MyParameters(new AsymmetricSecurityBindingElement());
            Assert.IsNotNull(p.BootstrapSecurityBindingElement, "#2-1");
            Assert.IsNotNull(p.BootstrapProtectionRequirements, "#2-2");
            Assert.AreEqual(true, p.RequireCancellation, "#2-3");

            Assert.AreEqual(false, p.Asym, "#2-4");              // regardless of binding element.
            Assert.AreEqual(false, p.Client, "#2-5");
            Assert.AreEqual(false, p.Win, "#2-6");
            Assert.AreEqual(false, p.Server, "#2-7");

            ChannelProtectionRequirements r =
                p.BootstrapProtectionRequirements;

            Assert.IsTrue(r.IncomingSignatureParts.ChannelParts.IsBodyIncluded, "#3-1");
            Assert.IsTrue(r.OutgoingSignatureParts.ChannelParts.IsBodyIncluded, "#3-2");
            Assert.IsTrue(r.IncomingEncryptionParts.ChannelParts.IsBodyIncluded, "#3-3");
            Assert.IsTrue(r.OutgoingEncryptionParts.ChannelParts.IsBodyIncluded, "#3-4");
        }
Beispiel #3
0
 protected SecureConversationSecurityTokenParameters(SecureConversationSecurityTokenParameters source)
     : base(source)
 {
     this.element      = (SecurityBindingElement)source.element.Clone();
     this.cancellable  = source.cancellable;
     this.requirements = new ChannelProtectionRequirements(default_channel_protection_requirements);
 }
Beispiel #4
0
        public override T GetProperty <T>(BindingContext context) where T : class
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }
            if (typeof(T) == typeof(ChannelProtectionRequirements))
            {
                ChannelProtectionRequirements protectionRequirements = this.GetProtectionRequirements(context);
                protectionRequirements.Add(context.GetInnerProperty <ChannelProtectionRequirements>() ?? new ChannelProtectionRequirements());
                return((T)protectionRequirements);
            }
            Collection <BindingElement> collection = context.BindingParameters.FindAll <BindingElement>();
            T individualProperty = default(T);

            for (int i = 0; i < collection.Count; i++)
            {
                individualProperty = collection[i].GetIndividualProperty <T>();
                if (individualProperty != new T())
                {
                    return(individualProperty);
                }
            }
            if (typeof(T) == typeof(MessageVersion))
            {
                return((T)TransportDefaults.GetDefaultMessageEncoderFactory().MessageVersion);
            }
            if (typeof(T) == typeof(XmlDictionaryReaderQuotas))
            {
                return((T) new XmlDictionaryReaderQuotas());
            }
            return(default(T));
        }
        private ChannelProtectionRequirements GetProtectionRequirements()
        {
            if (!this.Transactions && (this.IssuedTokens == TransactionFlowOption.NotAllowed))
            {
                return(null);
            }
            ChannelProtectionRequirements requirements = new ChannelProtectionRequirements();

            if (this.Transactions)
            {
                MessagePartSpecification specification = new MessagePartSpecification(new XmlQualifiedName[] { new XmlQualifiedName("CoordinationContext", "http://schemas.xmlsoap.org/ws/2004/10/wscoor"), new XmlQualifiedName("CoordinationContext", "http://docs.oasis-open.org/ws-tx/wscoor/2006/06"), new XmlQualifiedName("OleTxTransaction", "http://schemas.microsoft.com/ws/2006/02/tx/oletx") });
                specification.MakeReadOnly();
                requirements.IncomingSignatureParts.AddParts(specification);
                requirements.OutgoingSignatureParts.AddParts(specification);
                requirements.IncomingEncryptionParts.AddParts(specification);
                requirements.OutgoingEncryptionParts.AddParts(specification);
            }
            if (this.IssuedTokens != TransactionFlowOption.NotAllowed)
            {
                MessagePartSpecification issuedTokenHeaderSpecification = GetIssuedTokenHeaderSpecification(SecurityStandardsManager.DefaultInstance);
                issuedTokenHeaderSpecification.MakeReadOnly();
                requirements.IncomingSignatureParts.AddParts(issuedTokenHeaderSpecification);
                requirements.IncomingEncryptionParts.AddParts(issuedTokenHeaderSpecification);
                requirements.OutgoingSignatureParts.AddParts(issuedTokenHeaderSpecification);
                requirements.OutgoingEncryptionParts.AddParts(issuedTokenHeaderSpecification);
            }
            MessagePartSpecification parts = new MessagePartSpecification(true);

            parts.MakeReadOnly();
            requirements.OutgoingSignatureParts.AddParts(parts, "http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/transactions/fault");
            requirements.OutgoingEncryptionParts.AddParts(parts, "http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/transactions/fault");
            return(requirements);
        }
Beispiel #6
0
        public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
        {
            // Sign only the header, but not the body.

            // This does not work.
            //endpoint.Contract.ProtectionLevel = System.Net.Security.ProtectionLevel.Sign;
            //foreach (OperationDescription operation in endpoint.Contract.Operations)
            //{
            //    MessageDescription requestMessage = operation.Messages.First(msg => msg.Direction == MessageDirection.Input);

            //    foreach (MessagePartDescription body in requestMessage.Body.Parts)
            //    {
            //        body.ProtectionLevel = System.Net.Security.ProtectionLevel.None;
            //    }
            //}

            bindingParameters.Remove <ChannelProtectionRequirements>();

            var m = new MessagePartSpecification();

            m.IsBodyIncluded = false;

            var c1 = new ChannelProtectionRequirements();

            c1.IncomingSignatureParts.AddParts(m, "*");

            MessagePartSpecification m1 = new MessagePartSpecification();

            m.IsBodyIncluded = false;
            c1.IncomingEncryptionParts.AddParts(m1, "*");

            bindingParameters.Add(c1);
        }
        IChannelFactory <IRequestChannel> CreateDefaultServiceCertFactory()
        {
            CustomBinding b = CreateBinding(delegate(Message req) {
                return(null);
            });
            ClientCredentials cred = new ClientCredentials();

            cred.ServiceCertificate.DefaultCertificate = new X509Certificate2("Test/Resources/test.pfx", "mono");
            BindingParameterCollection parameters =
                new BindingParameterCollection();

            parameters.Add(cred);
            ChannelProtectionRequirements cp =
                new ChannelProtectionRequirements();

            cp.IncomingSignatureParts.AddParts(
                new MessagePartSpecification(true),
                "http://tempuri.org/MyAction");
            cp.IncomingEncryptionParts.AddParts(
                new MessagePartSpecification(true),
                "http://tempuri.org/MyAction");
            parameters.Add(cp);

            return(b.BuildChannelFactory <IRequestChannel> (parameters));
        }
Beispiel #8
0
 public override T GetProperty <T>(BindingContext context)
 {
     if (context == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
     }
     if (typeof(T) == typeof(ISecurityCapabilities))
     {
         ISecurityCapabilities lowerCapabilities = context.GetInnerProperty <ISecurityCapabilities>();
         if (lowerCapabilities != null)
         {
             // composite duplex cannot ensure that messages it receives are from the part it sends
             // messages to. So it cannot offer server auth
             return((T)(object)(new SecurityCapabilities(lowerCapabilities.SupportsClientAuthentication,
                                                         false, lowerCapabilities.SupportsClientWindowsIdentity, lowerCapabilities.SupportedRequestProtectionLevel,
                                                         System.Net.Security.ProtectionLevel.None)));
         }
         else
         {
             return(null);
         }
     }
     else if (typeof(T) == typeof(ChannelProtectionRequirements))
     {
         ChannelProtectionRequirements myRequirements = this.GetProtectionRequirements();
         myRequirements.Add(context.GetInnerProperty <ChannelProtectionRequirements>() ?? new ChannelProtectionRequirements());
         return((T)(object)myRequirements);
     }
     else
     {
         return(context.GetInnerProperty <T>());
     }
 }
Beispiel #9
0
            public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection parameters)
            {
                // get Contract info security needs, and put in BindingParameterCollection
                ISecurityCapabilities    isc      = null;
                BindingElementCollection elements = endpoint.Binding.CreateBindingElements();

                if (isc != null)
                {
                    // ensure existence of binding parameter
                    ChannelProtectionRequirements requirements = parameters.Find <ChannelProtectionRequirements>();
                    if (requirements == null)
                    {
                        requirements = new ChannelProtectionRequirements();
                        parameters.Add(requirements);
                    }

                    MessageEncodingBindingElement encoding = elements.Find <MessageEncodingBindingElement>();
                    // use endpoint.Binding.Version
                    if (encoding != null && encoding.MessageVersion.Addressing == AddressingVersion.None)
                    {
                        // This binding does not support response actions, so...
                        requirements.Add(ChannelProtectionRequirements.CreateFromContractAndUnionResponseProtectionRequirements(endpoint.Contract, isc, _isForClient));
                    }
                    else
                    {
                        requirements.Add(ChannelProtectionRequirements.CreateFromContract(endpoint.Contract, isc, _isForClient));
                    }
                }
            }
        public override T GetProperty <T>(BindingContext context) where T : class
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }
            if (!(typeof(T) == typeof(ChannelProtectionRequirements)))
            {
                return(context.GetInnerProperty <T>());
            }
            ChannelProtectionRequirements requirements = new ChannelProtectionRequirements();

            if (this.PacketRoutable)
            {
                requirements.IncomingSignatureParts.AddParts(OneWaySignedMessageParts);
                requirements.OutgoingSignatureParts.AddParts(OneWaySignedMessageParts);
            }
            ChannelProtectionRequirements innerProperty = context.GetInnerProperty <ChannelProtectionRequirements>();

            if (innerProperty != null)
            {
                requirements.Add(innerProperty);
            }
            return((T)requirements);
        }
        public override T GetProperty <T>(BindingContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }

            if (typeof(T) == typeof(ChannelProtectionRequirements))
            {
                AddressingVersion addressing = MessageVersion.Default.Addressing;
#pragma warning disable 56506
                MessageEncodingBindingElement encoding = context.Binding.Elements.Find <MessageEncodingBindingElement>();
                if (encoding != null)
                {
                    addressing = encoding.MessageVersion.Addressing;
                }
                ChannelProtectionRequirements myRequirements = base.GetProtectionRequirements(addressing, ProtectionLevel.EncryptAndSign);
                myRequirements.Add(context.GetInnerProperty <ChannelProtectionRequirements>() ?? new ChannelProtectionRequirements());
                return((T)(object)myRequirements);
            }
            else
            {
                return(base.GetProperty <T>(context));
            }
        }
        public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
        {
            ChannelProtectionRequirements requirements = bindingParameters.Find <ChannelProtectionRequirements>();
            MessagePartSpecification      part         = new MessagePartSpecification(true);

            requirements.OutgoingSignatureParts.AddParts(part);
        }
        public override T GetProperty <T>(BindingContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }

            // make sure our Datagram header is signed
            if (typeof(T) == typeof(ChannelProtectionRequirements))
            {
                ChannelProtectionRequirements myRequirements = new ChannelProtectionRequirements();
                if (PacketRoutable)
                {
                    myRequirements.IncomingSignatureParts.AddParts(OneWaySignedMessageParts);
                    myRequirements.OutgoingSignatureParts.AddParts(OneWaySignedMessageParts);
                }
                ChannelProtectionRequirements innerRequirements = context.GetInnerProperty <ChannelProtectionRequirements>();
                if (innerRequirements != null)
                {
                    myRequirements.Add(innerRequirements);
                }
                return((T)(object)myRequirements);
            }
            else
            {
                return(context.GetInnerProperty <T>());
            }
        }
Beispiel #14
0
 public RecipientMessageSecurityBindingSupport(
     SecurityCapabilities elementSupport,
     SecurityTokenManager manager,
     ChannelProtectionRequirements requirements)
     : base(elementSupport, manager, requirements)
 {
 }
Beispiel #15
0
 protected MessageSecurityBindingSupport(
     SecurityCapabilities elementSupport,
     SecurityTokenManager manager,
     ChannelProtectionRequirements requirements)
 {
     element_support = elementSupport;
     Initialize(manager, requirements);
 }
        public void AddToReadOnly()
        {
            ChannelProtectionRequirements r =
                new ChannelProtectionRequirements();

            r.MakeReadOnly();
            r.Add(new ChannelProtectionRequirements());
        }
        ChannelProtectionRequirements GetProtectionRequirements(AddressingVersion addressingVersion)
        {
            ChannelProtectionRequirements result = new ChannelProtectionRequirements();

            result.IncomingSignatureParts.AddParts(addressingVersion.SignedMessageParts);
            result.OutgoingSignatureParts.AddParts(addressingVersion.SignedMessageParts);
            return(result);
        }
Beispiel #18
0
        public void MessageSecurityManualProtection()
        {
            SymmetricSecurityBindingElement sbe =
                new SymmetricSecurityBindingElement();

            sbe.ProtectionTokenParameters =
                new X509SecurityTokenParameters();
            RequestSender sender = delegate(Message input) {
                MessageBuffer buf = input.CreateBufferedCopy(0x10000);
                using (XmlWriter w = XmlWriter.Create(Console.Error)) {
                    buf.CreateMessage().WriteMessage(w);
                }
                return(buf.CreateMessage());
            };

            CustomBinding binding = new CustomBinding(
                sbe,
                new TextMessageEncodingBindingElement(),
                new HandlerTransportBindingElement(sender));

            EndpointAddress address = new EndpointAddress(
                new Uri("http://localhost:8080"),
                new X509CertificateEndpointIdentity(new X509Certificate2("Test/Resources/test.pfx", "mono")));

            ChannelProtectionRequirements reqs =
                new ChannelProtectionRequirements();

            reqs.OutgoingSignatureParts.AddParts(
                new MessagePartSpecification(new XmlQualifiedName("SampleValue", "urn:foo")), "urn:myaction");
            BindingParameterCollection parameters =
                new BindingParameterCollection();

            parameters.Add(reqs);

/*
 *                      SymmetricSecurityBindingElement innersbe =
 *                              new SymmetricSecurityBindingElement ();
 *                      innersbe.ProtectionTokenParameters =
 *                              new X509SecurityTokenParameters ();
 *                      sbe.ProtectionTokenParameters =
 *                              new SecureConversationSecurityTokenParameters (
 *                                      innersbe, false, reqs);
 */

            IChannelFactory <IRequestChannel> cf =
                binding.BuildChannelFactory <IRequestChannel> (parameters);

            cf.Open();
            IRequestChannel ch = cf.CreateChannel(address);

            ch.Open();
            try {
                ch.Request(Message.CreateMessage(MessageVersion.None, "urn:myaction", new SampleValue()));
            } finally {
                ch.Close();
            }
        }
Beispiel #19
0
        protected SecureConversationSecurityTokenParameters(SecureConversationSecurityTokenParameters other)
            : base(other)
        {
            this.element     = (SecurityBindingElement)other.element.Clone();
            this.cancellable = other.cancellable;
#if !MOBILE && !XAMMAC_4_5
            this.requirements = new ChannelProtectionRequirements(default_channel_protection_requirements);
#endif
        }
Beispiel #20
0
        public override IChannelFactory <T> BuildChannelFactory <T> (BindingContext ctx)
        {
            ChannelProtectionRequirements cp = ctx.BindingParameters.Find <ChannelProtectionRequirements> ();

            DumpParts(cp.IncomingEncryptionParts);
            DumpParts(cp.IncomingSignatureParts);
            DumpParts(cp.OutgoingEncryptionParts);
            DumpParts(cp.OutgoingSignatureParts);
            return(ctx.BuildInnerChannelFactory <T> ());
        }
Beispiel #21
0
        private static ChannelProtectionRequirements GetProtectionRequirements(AddressingVersion addressingVersion)
        {
            PropertyInfo                  property = addressingVersion.GetType().GetProperty("SignedMessageParts", BindingFlags.Instance | BindingFlags.NonPublic);
            MessagePartSpecification      value    = (MessagePartSpecification)property.GetValue(addressingVersion, new object[0]);
            ChannelProtectionRequirements channelProtectionRequirement = new ChannelProtectionRequirements();

            channelProtectionRequirement.IncomingSignatureParts.AddParts(value);
            channelProtectionRequirement.OutgoingSignatureParts.AddParts(value);
            return(channelProtectionRequirement);
        }
        public void AddBindingParameters(ContractDescription contractDescription,
                                         ServiceEndpoint endpoint,
                                         BindingParameterCollection bindingParameters)
        {
            Console.WriteLine("add outgoing signature parts");
            ChannelProtectionRequirements requirements = bindingParameters.Find <ChannelProtectionRequirements>();
            MessagePartSpecification      part         = new MessagePartSpecification(true);

            requirements.OutgoingSignatureParts.AddParts(part);
        }
Beispiel #23
0
 public void Initialize(SecurityTokenManager manager,
                        ChannelProtectionRequirements requirements)
 {
     this.manager = manager;
     if (requirements == null)
     {
         requirements = new ChannelProtectionRequirements();
     }
     this.requirements = requirements;
 }
Beispiel #24
0
        internal ChannelProtectionRequirements GetProtectionRequirements(AddressingVersion addressing, ProtectionLevel defaultProtectionLevel)
        {
            if (addressing == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(addressing));
            }

            ChannelProtectionRequirements result             = new ChannelProtectionRequirements();
            ProtectionLevel supportedRequestProtectionLevel  = GetIndividualProperty <ISecurityCapabilities>().SupportedRequestProtectionLevel;
            ProtectionLevel supportedResponseProtectionLevel = GetIndividualProperty <ISecurityCapabilities>().SupportedResponseProtectionLevel;

            bool canSupportMoreThanTheDefault =
                (ProtectionLevelHelper.IsStrongerOrEqual(supportedRequestProtectionLevel, defaultProtectionLevel) &&
                 ProtectionLevelHelper.IsStrongerOrEqual(supportedResponseProtectionLevel, defaultProtectionLevel));

            if (canSupportMoreThanTheDefault)
            {
                MessagePartSpecification signedParts    = new MessagePartSpecification();
                MessagePartSpecification encryptedParts = new MessagePartSpecification();
                if (defaultProtectionLevel != ProtectionLevel.None)
                {
                    signedParts.IsBodyIncluded = true;
                    if (defaultProtectionLevel == ProtectionLevel.EncryptAndSign)
                    {
                        encryptedParts.IsBodyIncluded = true;
                    }
                }
                signedParts.MakeReadOnly();
                encryptedParts.MakeReadOnly();
                if (addressing.FaultAction != null)
                {
                    // Addressing faults
                    result.IncomingSignatureParts.AddParts(signedParts, addressing.FaultAction);
                    result.OutgoingSignatureParts.AddParts(signedParts, addressing.FaultAction);
                    result.IncomingEncryptionParts.AddParts(encryptedParts, addressing.FaultAction);
                    result.OutgoingEncryptionParts.AddParts(encryptedParts, addressing.FaultAction);
                }
                if (addressing.DefaultFaultAction != null)
                {
                    // Faults that do not specify a particular action
                    result.IncomingSignatureParts.AddParts(signedParts, addressing.DefaultFaultAction);
                    result.OutgoingSignatureParts.AddParts(signedParts, addressing.DefaultFaultAction);
                    result.IncomingEncryptionParts.AddParts(encryptedParts, addressing.DefaultFaultAction);
                    result.OutgoingEncryptionParts.AddParts(encryptedParts, addressing.DefaultFaultAction);
                }
                // Infrastructure faults
                result.IncomingSignatureParts.AddParts(signedParts, FaultCodeConstants.Actions.NetDispatcher);
                result.OutgoingSignatureParts.AddParts(signedParts, FaultCodeConstants.Actions.NetDispatcher);
                result.IncomingEncryptionParts.AddParts(encryptedParts, FaultCodeConstants.Actions.NetDispatcher);
                result.OutgoingEncryptionParts.AddParts(encryptedParts, FaultCodeConstants.Actions.NetDispatcher);
            }

            return(result);
        }
Beispiel #25
0
        private ChannelProtectionRequirements GetProtectionRequirements()
        {
            ChannelProtectionRequirements requirements = new ChannelProtectionRequirements();
            XmlQualifiedName         name  = new XmlQualifiedName(XD.UtilityDictionary.UniqueEndpointHeaderName.Value, XD.UtilityDictionary.UniqueEndpointHeaderNamespace.Value);
            MessagePartSpecification parts = new MessagePartSpecification(new XmlQualifiedName[] { name });

            parts.MakeReadOnly();
            requirements.IncomingSignatureParts.AddParts(parts);
            requirements.OutgoingSignatureParts.AddParts(parts);
            return(requirements);
        }
        public void DefaultValues()
        {
            ChannelProtectionRequirements r =
                new ChannelProtectionRequirements();

            Assert.AreEqual(false, r.IsReadOnly, "#1");
            Assert.IsNotNull(r.IncomingSignatureParts, "#2");
            Assert.IsNotNull(r.IncomingEncryptionParts, "#3");
            Assert.IsNotNull(r.OutgoingSignatureParts, "#4");
            Assert.IsNotNull(r.OutgoingEncryptionParts, "#5");
        }
Beispiel #27
0
        ChannelProtectionRequirements GetProtectionRequirements()
        {
            ChannelProtectionRequirements result = new ChannelProtectionRequirements();
            XmlQualifiedName refPropHeaderName   = new XmlQualifiedName(XD.UtilityDictionary.UniqueEndpointHeaderName.Value,
                                                                        XD.UtilityDictionary.UniqueEndpointHeaderNamespace.Value);
            MessagePartSpecification headerParts = new MessagePartSpecification(refPropHeaderName);

            headerParts.MakeReadOnly();
            result.IncomingSignatureParts.AddParts(headerParts);
            result.OutgoingSignatureParts.AddParts(headerParts);
            return(result);
        }
Beispiel #28
0
        CreateSecureConversationBindingElement(
            SecurityBindingElement binding, bool requireCancellation,
            ChannelProtectionRequirements protectionRequirements)
        {
            SymmetricSecurityBindingElement be =
                new SymmetricSecurityBindingElement();

            be.ProtectionTokenParameters =
                new SecureConversationSecurityTokenParameters(
                    binding, requireCancellation, protectionRequirements);
            return(be);
        }
Beispiel #29
0
        public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
        {
            //Find the old requirements and remove
            var requirements = bindingParameters.Find <ChannelProtectionRequirements>();

            bindingParameters.Remove(requirements);

            //Setting the ProtectionLevel at the Service Contract
            if (ProtectionSetting == "None")
            {
                endpoint.Contract.ProtectionLevel = ProtectionLevel.None;
            }
            if (ProtectionSetting == "Sign")
            {
                endpoint.Contract.ProtectionLevel = ProtectionLevel.Sign;
            }
            if (ProtectionSetting == "EncryptAndSign")
            {
                endpoint.Contract.ProtectionLevel = ProtectionLevel.EncryptAndSign;
            }

            //create a new set of requirements
            requirements = new ChannelProtectionRequirements();
            bindingParameters.Add(requirements);

            var unprotectedBody = new MessagePartSpecification();
            var protectedBody   = new MessagePartSpecification(true);

            switch (endpoint.Contract.ProtectionLevel)
            {
            case ProtectionLevel.None:
                requirements.OutgoingSignatureParts.AddParts(unprotectedBody, "*");
                requirements.IncomingSignatureParts.AddParts(unprotectedBody, "*");
                requirements.OutgoingEncryptionParts.AddParts(unprotectedBody, "*");
                requirements.IncomingEncryptionParts.AddParts(unprotectedBody, "*");
                break;

            case ProtectionLevel.Sign:
                requirements.OutgoingSignatureParts.AddParts(protectedBody, "*");
                requirements.IncomingSignatureParts.AddParts(protectedBody, "*");

                requirements.OutgoingEncryptionParts.AddParts(unprotectedBody, "*");
                requirements.IncomingEncryptionParts.AddParts(unprotectedBody, "*");
                break;

            case ProtectionLevel.EncryptAndSign:
                requirements.OutgoingSignatureParts.AddParts(protectedBody, "*");
                requirements.IncomingSignatureParts.AddParts(protectedBody, "*");
                requirements.OutgoingEncryptionParts.AddParts(protectedBody, "*");
                requirements.IncomingEncryptionParts.AddParts(protectedBody, "*");
                break;
            }
        }
Beispiel #30
0
        private ChannelProtectionRequirements GetProtectionRequirements()
        {
            ChannelProtectionRequirements requirements = new ChannelProtectionRequirements();
            MessagePartSpecification      signedReliabilityMessageParts = WsrmIndex.GetSignedReliabilityMessageParts(this.reliableMessagingVersion);

            requirements.IncomingSignatureParts.AddParts(signedReliabilityMessageParts);
            requirements.OutgoingSignatureParts.AddParts(signedReliabilityMessageParts);
            if (this.reliableMessagingVersion == System.ServiceModel.ReliableMessagingVersion.WSReliableMessagingFebruary2005)
            {
                ScopedMessagePartSpecification signaturePart  = requirements.IncomingSignatureParts;
                ScopedMessagePartSpecification encryptionPart = requirements.IncomingEncryptionParts;
                ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/AckRequested");
                ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence");
                ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/SequenceAcknowledgement");
                ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage");
                ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequence");
                signaturePart  = requirements.OutgoingSignatureParts;
                encryptionPart = requirements.OutgoingEncryptionParts;
                ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceResponse");
                ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/SequenceAcknowledgement");
                ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage");
                ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequence");
                return(requirements);
            }
            if (this.reliableMessagingVersion != System.ServiceModel.ReliableMessagingVersion.WSReliableMessaging11)
            {
                throw Fx.AssertAndThrow("Reliable messaging version not supported.");
            }
            ScopedMessagePartSpecification incomingSignatureParts  = requirements.IncomingSignatureParts;
            ScopedMessagePartSpecification incomingEncryptionParts = requirements.IncomingEncryptionParts;

            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/AckRequested");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequence");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequenceResponse");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/CreateSequence");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/fault");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/SequenceAcknowledgement");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/TerminateSequence");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/TerminateSequenceResponse");
            incomingSignatureParts  = requirements.OutgoingSignatureParts;
            incomingEncryptionParts = requirements.OutgoingEncryptionParts;
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/AckRequested");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequence");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequenceResponse");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/CreateSequenceResponse");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/fault");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/SequenceAcknowledgement");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/TerminateSequence");
            ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/TerminateSequenceResponse");
            return(requirements);
        }