Exemplo n.º 1
0
            protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
            {
                var    nonce       = getNonce();
                string nonceToSend = Convert.ToBase64String(Encoding.UTF8.GetBytes(nonce.ToString()));
                UserNameSecurityToken userToken;

                userToken = new UserNameSecurityToken();

                IntPtr accountToken = WindowsIdentity.GetCurrent().Token;


                writer.WriteStartElement("wsse", "UsernameToken", Namespace);
                writer.WriteAttributeString("Id", userToken.Id.ToString());
                //writer.WriteAttributeString("wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");

                writer.WriteStartElement("wsse", "Username", Namespace);
                writer.WriteValue(_username);
                writer.WriteEndElement();

                writer.WriteStartElement("wsse", "Password", Namespace);
                writer.WriteAttributeString("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
                writer.WriteValue(_password);
                writer.WriteEndElement();

                writer.WriteStartElement("wsse", "Nonce", Namespace);
                writer.WriteAttributeString("EncodingType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
                writer.WriteValue(_nonce);
                writer.WriteEndElement();

                writer.WriteStartElement("wsse", "Created", Namespace);
                writer.WriteValue(_createdDate.ToString("YYYY-MM-DDThh:mm:ss"));
                writer.WriteEndElement();

                writer.WriteEndElement();
            }
Exemplo n.º 2
0
        protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
        {
            var    nonce         = GetNonce();
            var    created       = DateTime.UtcNow.Add(time_shift).ToString("yyyy-MM-ddTHH:mm:ss.fffZ");
            var    nonce_str     = Convert.ToBase64String(nonce);
            string password_hash = PasswordDigest(nonce, created, password);

            writer.WriteStartElement("UsernameToken");

            writer.WriteStartElement("Username");
            writer.WriteValue(username);
            writer.WriteEndElement();

            writer.WriteStartElement("Password");
            writer.WriteAttributeString("Type",
                                        "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest");
            writer.WriteValue(password_hash);
            writer.WriteEndElement();

            writer.WriteStartElement("Nonce");
            writer.WriteAttributeString("EncodingType",
                                        "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
            writer.WriteValue(nonce_str);
            writer.WriteEndElement();

            writer.WriteStartElement("Created");
            writer.WriteXmlnsAttribute("", ns_wsu);
            writer.WriteValue(created);
            writer.WriteEndElement();

            writer.WriteEndElement();
        }
Exemplo n.º 3
0
 protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
 {
     writer.WriteStartElement("Pull", "http://schemas.xmlsoap.org/ws/2004/09/enumeration");
     if (this._enumerationContext != null)
     {
         writer.WriteElementString("EnumerationContext", "http://schemas.xmlsoap.org/ws/2004/09/enumeration", this._enumerationContext);
     }
     if (this._timeout.HasValue)
     {
         writer.WriteStartElement("MaxTime", "http://schemas.xmlsoap.org/ws/2004/09/enumeration");
         writer.WriteValue(this._timeout.Value);
         writer.WriteEndElement();
     }
     if (this._maxElements.HasValue)
     {
         writer.WriteStartElement("MaxElements", "http://schemas.xmlsoap.org/ws/2004/09/enumeration");
         writer.WriteValue(this._maxElements.Value);
         writer.WriteEndElement();
     }
     if (this._controls != null)
     {
         DirectoryControlSerializer.Serialize(writer, this._controls);
     }
     writer.WriteEndElement();
 }
        protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
        {
            WsrmFeb2005Dictionary dictionary   = XD.WsrmFeb2005Dictionary;
            XmlDictionaryString   namespaceUri = WsrmIndex.GetNamespace(this.reliableMessagingVersion);

            writer.WriteStartElement(dictionary.CreateSequenceResponse, namespaceUri);
            writer.WriteStartElement(dictionary.Identifier, namespaceUri);
            writer.WriteValue(this.identifier);
            writer.WriteEndElement();
            if (this.expires.HasValue)
            {
                writer.WriteStartElement(dictionary.Expires, namespaceUri);
                writer.WriteValue(this.expires.Value);
                writer.WriteEndElement();
            }
            if (this.reliableMessagingVersion == ReliableMessagingVersion.WSReliableMessaging11)
            {
                Wsrm11Dictionary dictionary2 = DXD.Wsrm11Dictionary;
                writer.WriteStartElement(dictionary2.IncompleteSequenceBehavior, namespaceUri);
                writer.WriteValue(this.ordered ? dictionary2.DiscardFollowingFirstGap : dictionary2.NoDiscard);
                writer.WriteEndElement();
            }
            if (this.acceptAcksTo != null)
            {
                writer.WriteStartElement(dictionary.Accept, namespaceUri);
                this.acceptAcksTo.WriteTo(this.addressingVersion, writer, dictionary.AcksTo, namespaceUri);
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
        }
Exemplo n.º 5
0
        public static void WriteLinkItem(LinkItem linkItem, XmlDictionaryWriter xmlWriter)
        {
            /* What the contents of the link item look like...
             *
             *  <b:Id>xs:int</b:Id>
             *  <b:Title>xs:string</b:Title>
             *  <b:Description>xs:string</b:Description>
             *  <b:DateStart>xs:dateTime</b:DateStart>
             *  <b:DateEnd>xs:dateTime</b:DateEnd>
             *  <b:Url>xs:string</b:Url>
             */
            xmlWriter.WriteStartElement("Id", ns);
            xmlWriter.WriteValue(linkItem.Id);
            xmlWriter.WriteEndElement();

            xmlWriter.WriteElementString("Title", ns, linkItem.Title);
            xmlWriter.WriteElementString("Description", ns, linkItem.Description);

            xmlWriter.WriteStartElement("DateStart", ns);
            xmlWriter.WriteValue(linkItem.DateStart);
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("DateEnd", ns);
            xmlWriter.WriteValue(linkItem.DateEnd);
            xmlWriter.WriteEndElement();

            xmlWriter.WriteElementString("Url", ns, linkItem.Url);
        }
Exemplo n.º 6
0
        protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
        {
            WsrmFeb2005Dictionary dictionary   = XD.WsrmFeb2005Dictionary;
            XmlDictionaryString   namespaceUri = WsrmIndex.GetNamespace(this.reliableMessagingVersion);

            writer.WriteStartElement(dictionary.CreateSequence, namespaceUri);
            EndpointAddress localAddress = this.binder.LocalAddress;

            localAddress.WriteTo(this.addressingVersion, writer, dictionary.AcksTo, namespaceUri);
            if (this.offerIdentifier != null)
            {
                writer.WriteStartElement(dictionary.Offer, namespaceUri);
                writer.WriteStartElement(dictionary.Identifier, namespaceUri);
                writer.WriteValue(this.offerIdentifier);
                writer.WriteEndElement();
                if (this.reliableMessagingVersion == ReliableMessagingVersion.WSReliableMessaging11)
                {
                    Wsrm11Dictionary dictionary2 = DXD.Wsrm11Dictionary;
                    localAddress.WriteTo(this.addressingVersion, writer, dictionary2.Endpoint, namespaceUri);
                    writer.WriteStartElement(dictionary2.IncompleteSequenceBehavior, namespaceUri);
                    writer.WriteValue(this.ordered ? dictionary2.DiscardFollowingFirstGap : dictionary2.NoDiscard);
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
            }
            ISecureConversationSession innerSession = this.binder.GetInnerSession() as ISecureConversationSession;

            if (innerSession != null)
            {
                innerSession.WriteSessionTokenIdentifier(writer);
            }
            writer.WriteEndElement();
        }
        protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
        {
            string username = UserName;
            string password = PassWord;
            string nonce    = GetNonce();
            string created  = GetCreated();
            string digest   = GetPasswordDigest(nonce, created, password);

            writer.WriteAttributeString("xmlns", "wsse", null, NAMESPACE_SECURITY_0);
            writer.WriteAttributeString("xmlns", "wsu", null, NAMESPACE_SECURITY_1);

            writer.WriteStartElement("wsse:UsernameToken");

            writer.WriteStartElement("wsse:Username");
            writer.WriteValue(username);
            writer.WriteEndElement();

            writer.WriteStartElement("wsse:Password");
            //少了这个Type属性,可能会报错
            writer.WriteAttributeString("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest");
            writer.WriteValue(digest);
            writer.WriteEndElement();

            writer.WriteStartElement("wsse:Nonce");
            writer.WriteValue(nonce);
            writer.WriteEndElement();

            writer.WriteStartElement("wsu:Created");
            writer.WriteValue(created);
            writer.WriteEndElement();

            writer.WriteEndElement();
        }
Exemplo n.º 8
0
        protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
        {
            writer.WriteStartElement("wsse", "UsernameToken", Namespace);
            writer.WriteAttributeString("wsu:Id", "UsernameToken-2");
            writer.WriteAttributeString("xmlns:wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");

            writer.WriteStartElement("wsse", "Username", Namespace);
            writer.WriteValue(_username);
            writer.WriteEndElement();

            writer.WriteStartElement("wsse", "Password", Namespace);
            writer.WriteAttributeString("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
            writer.WriteValue(_password);
            writer.WriteEndElement();

            writer.WriteStartElement("wsse", "Nonce", Namespace);
            writer.WriteAttributeString("EncodingType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
            writer.WriteValue(_nonce);
            writer.WriteEndElement();

            writer.WriteStartElement("wsu:Created");
            writer.WriteValue(_createdDate);
            writer.WriteEndElement();
            writer.WriteEndElement();
            writer.WriteEndElement();
        }
Exemplo n.º 9
0
        internal static void WriteAckRanges(XmlDictionaryWriter writer, ReliableMessagingVersion reliableMessagingVersion, UniqueId sequenceId, SequenceRangeCollection ranges)
        {
            WsrmFeb2005Dictionary dictionary   = XD.WsrmFeb2005Dictionary;
            XmlDictionaryString   namespaceUri = WsrmIndex.GetNamespace(reliableMessagingVersion);

            writer.WriteStartElement(dictionary.Identifier, namespaceUri);
            writer.WriteValue(sequenceId);
            writer.WriteEndElement();
            if (ranges.Count == 0)
            {
                if (reliableMessagingVersion == ReliableMessagingVersion.WSReliableMessagingFebruary2005)
                {
                    ranges = ranges.MergeWith((long)0L);
                }
                else if (reliableMessagingVersion == ReliableMessagingVersion.WSReliableMessaging11)
                {
                    writer.WriteStartElement(DXD.Wsrm11Dictionary.None, namespaceUri);
                    writer.WriteEndElement();
                }
            }
            for (int i = 0; i < ranges.Count; i++)
            {
                writer.WriteStartElement(dictionary.AcknowledgementRange, namespaceUri);
                writer.WriteStartAttribute(dictionary.Lower, null);
                SequenceRange range = ranges[i];
                writer.WriteValue(range.Lower);
                writer.WriteEndAttribute();
                writer.WriteStartAttribute(dictionary.Upper, null);
                SequenceRange range2 = ranges[i];
                writer.WriteValue(range2.Upper);
                writer.WriteEndAttribute();
                writer.WriteEndElement();
            }
        }
Exemplo n.º 10
0
        protected override void OnWriteAddressHeaderContents(XmlDictionaryWriter writer)
        {
            writer.WriteStartElement(XD.DotNetAtomicTransactionExternalDictionary.LocalTransactionId,
                                     XD.DotNetAtomicTransactionExternalDictionary.Namespace);

            writer.WriteValue(this.transactionId);
            writer.WriteEndElement();

            if (this.contextId != null)
            {
                writer.WriteStartElement(XD.DotNetAtomicTransactionExternalDictionary.ContextId,
                                         XD.DotNetAtomicTransactionExternalDictionary.Namespace);

                writer.WriteValue(this.contextId);
                writer.WriteEndElement();
            }

            if (this.tokenId != null)
            {
                writer.WriteStartElement(XD.DotNetAtomicTransactionExternalDictionary.TokenId,
                                         XD.DotNetAtomicTransactionExternalDictionary.Namespace);

                writer.WriteValue(this.tokenId);
                writer.WriteEndElement();
            }
        }
Exemplo n.º 11
0
            public override void WriteTokenCore(XmlDictionaryWriter writer, SecurityToken token)
            {
                DerivedKeySecurityToken derivedKeyToken = token as DerivedKeySecurityToken;
                string serializerPrefix = parent.SerializerDictionary.Prefix.Value;

                writer.WriteStartElement(serializerPrefix, parent.SerializerDictionary.DerivedKeyToken, parent.SerializerDictionary.Namespace);
                if (derivedKeyToken.Id != null)
                {
                    writer.WriteAttributeString(CoreWCF.XD.UtilityDictionary.Prefix.Value, CoreWCF.XD.UtilityDictionary.IdAttribute, CoreWCF.XD.UtilityDictionary.Namespace, derivedKeyToken.Id);
                }
                if (derivedKeyToken.KeyDerivationAlgorithm != parent.DerivationAlgorithm)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.Format(SR.UnsupportedKeyDerivationAlgorithm, derivedKeyToken.KeyDerivationAlgorithm)));
                }
                parent.WSSecurityTokenSerializer.WriteKeyIdentifierClause(writer, derivedKeyToken.TokenToDeriveIdentifier);

                // Don't support Properties element
                if (derivedKeyToken.Generation > 0 || derivedKeyToken.Offset > 0 || derivedKeyToken.Length != 32)
                {
                    // this means they're both specified (offset must be gen * length) - we'll write generation
                    if (derivedKeyToken.Generation >= 0 && derivedKeyToken.Offset >= 0)
                    {
                        writer.WriteStartElement(serializerPrefix, parent.SerializerDictionary.Generation, parent.SerializerDictionary.Namespace);
                        writer.WriteValue(derivedKeyToken.Generation);
                        writer.WriteEndElement();
                    }
                    else if (derivedKeyToken.Generation != -1)
                    {
                        writer.WriteStartElement(serializerPrefix, parent.SerializerDictionary.Generation, parent.SerializerDictionary.Namespace);
                        writer.WriteValue(derivedKeyToken.Generation);
                        writer.WriteEndElement();
                    }
                    else if (derivedKeyToken.Offset != -1)
                    {
                        writer.WriteStartElement(serializerPrefix, parent.SerializerDictionary.Offset, parent.SerializerDictionary.Namespace);
                        writer.WriteValue(derivedKeyToken.Offset);
                        writer.WriteEndElement();
                    }

                    if (derivedKeyToken.Length != 32)
                    {
                        writer.WriteStartElement(serializerPrefix, parent.SerializerDictionary.Length, parent.SerializerDictionary.Namespace);
                        writer.WriteValue(derivedKeyToken.Length);
                        writer.WriteEndElement();
                    }
                }

                if (derivedKeyToken.Label != null)
                {
                    writer.WriteStartElement(serializerPrefix, parent.SerializerDictionary.Generation, parent.SerializerDictionary.Namespace);
                    writer.WriteString(derivedKeyToken.Label);
                    writer.WriteEndElement();
                }
                writer.WriteStartElement(serializerPrefix, parent.SerializerDictionary.Nonce, parent.SerializerDictionary.Namespace);
                writer.WriteBase64(derivedKeyToken.Nonce, 0, derivedKeyToken.Nonce.Length);
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
 protected override void OnWriteAddressHeaderContents(XmlDictionaryWriter writer)
 {
     if (this.protocol != ControlProtocol.None)
     {
         writer.WriteStartAttribute(XD.DotNetAtomicTransactionExternalDictionary.Protocol, XD.DotNetAtomicTransactionExternalDictionary.Namespace);
         writer.WriteValue((int)this.protocol);
         writer.WriteEndAttribute();
     }
     writer.WriteValue(this.enlistment);
 }
Exemplo n.º 13
0
            public override void WriteTokenCore(XmlDictionaryWriter writer, SecurityToken token)
            {
                DerivedKeySecurityToken keySecurityToken = token as DerivedKeySecurityToken;
                string prefix = this.parent.SerializerDictionary.Prefix.Value;

                writer.WriteStartElement(prefix, this.parent.SerializerDictionary.DerivedKeyToken, this.parent.SerializerDictionary.Namespace);
                if (keySecurityToken.Id != null)
                {
                    writer.WriteAttributeString(XD.UtilityDictionary.Prefix.Value, XD.UtilityDictionary.IdAttribute, XD.UtilityDictionary.Namespace, keySecurityToken.Id);
                }
                if (keySecurityToken.KeyDerivationAlgorithm != this.parent.DerivationAlgorithm)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError((Exception) new MessageSecurityException(SR.GetString("UnsupportedKeyDerivationAlgorithm", new object[1] {
                        (object)keySecurityToken.KeyDerivationAlgorithm
                    })));
                }
                this.parent.WSSecurityTokenSerializer.WriteKeyIdentifierClause((XmlWriter)writer, keySecurityToken.TokenToDeriveIdentifier);
                if (keySecurityToken.Generation > 0 || keySecurityToken.Offset > 0 || keySecurityToken.Length != 32)
                {
                    if (keySecurityToken.Generation >= 0 && keySecurityToken.Offset >= 0)
                    {
                        writer.WriteStartElement(prefix, this.parent.SerializerDictionary.Generation, this.parent.SerializerDictionary.Namespace);
                        writer.WriteValue(keySecurityToken.Generation);
                        writer.WriteEndElement();
                    }
                    else if (keySecurityToken.Generation != -1)
                    {
                        writer.WriteStartElement(prefix, this.parent.SerializerDictionary.Generation, this.parent.SerializerDictionary.Namespace);
                        writer.WriteValue(keySecurityToken.Generation);
                        writer.WriteEndElement();
                    }
                    else if (keySecurityToken.Offset != -1)
                    {
                        writer.WriteStartElement(prefix, this.parent.SerializerDictionary.Offset, this.parent.SerializerDictionary.Namespace);
                        writer.WriteValue(keySecurityToken.Offset);
                        writer.WriteEndElement();
                    }
                    if (keySecurityToken.Length != 32)
                    {
                        writer.WriteStartElement(prefix, this.parent.SerializerDictionary.Length, this.parent.SerializerDictionary.Namespace);
                        writer.WriteValue(keySecurityToken.Length);
                        writer.WriteEndElement();
                    }
                }
                if (keySecurityToken.Label != null)
                {
                    writer.WriteStartElement(prefix, this.parent.SerializerDictionary.Generation, this.parent.SerializerDictionary.Namespace);
                    writer.WriteString(keySecurityToken.Label);
                    writer.WriteEndElement();
                }
                writer.WriteStartElement(prefix, this.parent.SerializerDictionary.Nonce, this.parent.SerializerDictionary.Namespace);
                writer.WriteBase64(keySecurityToken.Nonce, 0, keySecurityToken.Nonce.Length);
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
        public virtual void WriteXml(XmlDictionaryWriter writer, SamlSerializer samlSerializer, SecurityTokenSerializer keyInfoSerializer)
        {
            this.CheckObjectValidity();
            if (writer == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("writer");
            }
            if (samlSerializer == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("samlSerializer"));
            }
            SamlDictionary samlDictionary = samlSerializer.DictionaryManager.SamlDictionary;

            try
            {
                writer.WriteStartElement(samlDictionary.PreferredPrefix.Value, samlDictionary.Assertion, samlDictionary.Namespace);
                writer.WriteStartAttribute(samlDictionary.MajorVersion, null);
                writer.WriteValue(SamlConstants.MajorVersionValue);
                writer.WriteEndAttribute();
                writer.WriteStartAttribute(samlDictionary.MinorVersion, null);
                writer.WriteValue(SamlConstants.MinorVersionValue);
                writer.WriteEndAttribute();
                writer.WriteStartAttribute(samlDictionary.AssertionId, null);
                writer.WriteString(this.assertionId);
                writer.WriteEndAttribute();
                writer.WriteStartAttribute(samlDictionary.Issuer, null);
                writer.WriteString(this.issuer);
                writer.WriteEndAttribute();
                writer.WriteStartAttribute(samlDictionary.IssueInstant, null);
                writer.WriteString(this.issueInstant.ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture));
                writer.WriteEndAttribute();
                if (this.conditions != null)
                {
                    this.conditions.WriteXml(writer, samlSerializer, keyInfoSerializer);
                }
                if (this.advice != null)
                {
                    this.advice.WriteXml(writer, samlSerializer, keyInfoSerializer);
                }
                for (int i = 0; i < this.statements.Count; i++)
                {
                    this.statements[i].WriteXml(writer, samlSerializer, keyInfoSerializer);
                }
                writer.WriteEndElement();
            }
            catch (Exception exception)
            {
                if (Fx.IsFatal(exception))
                {
                    throw;
                }
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.IdentityModel.SR.GetString("SAMLTokenNotSerialized"), exception));
            }
        }
            public override void WriteTokenCore(XmlDictionaryWriter writer, SecurityToken token)
            {
                DerivedKeySecurityToken token2 = token as DerivedKeySecurityToken;
                string prefix = this.parent.SerializerDictionary.Prefix.Value;

                writer.WriteStartElement(prefix, this.parent.SerializerDictionary.DerivedKeyToken, this.parent.SerializerDictionary.Namespace);
                if (token2.Id != null)
                {
                    writer.WriteAttributeString(XD.UtilityDictionary.Prefix.Value, XD.UtilityDictionary.IdAttribute, XD.UtilityDictionary.Namespace, token2.Id);
                }
                if (token2.KeyDerivationAlgorithm != this.parent.DerivationAlgorithm)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(System.ServiceModel.SR.GetString("UnsupportedKeyDerivationAlgorithm", new object[] { token2.KeyDerivationAlgorithm })));
                }
                this.parent.WSSecurityTokenSerializer.WriteKeyIdentifierClause(writer, token2.TokenToDeriveIdentifier);
                if (((token2.Generation > 0) || (token2.Offset > 0)) || (token2.Length != 0x20))
                {
                    if ((token2.Generation >= 0) && (token2.Offset >= 0))
                    {
                        writer.WriteStartElement(prefix, this.parent.SerializerDictionary.Generation, this.parent.SerializerDictionary.Namespace);
                        writer.WriteValue(token2.Generation);
                        writer.WriteEndElement();
                    }
                    else if (token2.Generation != -1)
                    {
                        writer.WriteStartElement(prefix, this.parent.SerializerDictionary.Generation, this.parent.SerializerDictionary.Namespace);
                        writer.WriteValue(token2.Generation);
                        writer.WriteEndElement();
                    }
                    else if (token2.Offset != -1)
                    {
                        writer.WriteStartElement(prefix, this.parent.SerializerDictionary.Offset, this.parent.SerializerDictionary.Namespace);
                        writer.WriteValue(token2.Offset);
                        writer.WriteEndElement();
                    }
                    if (token2.Length != 0x20)
                    {
                        writer.WriteStartElement(prefix, this.parent.SerializerDictionary.Length, this.parent.SerializerDictionary.Namespace);
                        writer.WriteValue(token2.Length);
                        writer.WriteEndElement();
                    }
                }
                if (token2.Label != null)
                {
                    writer.WriteStartElement(prefix, this.parent.SerializerDictionary.Generation, this.parent.SerializerDictionary.Namespace);
                    writer.WriteString(token2.Label);
                    writer.WriteEndElement();
                }
                writer.WriteStartElement(prefix, this.parent.SerializerDictionary.Nonce, this.parent.SerializerDictionary.Namespace);
                writer.WriteBase64(token2.Nonce, 0, token2.Nonce.Length);
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
Exemplo n.º 16
0
        protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
        {
            writer.WriteStartElement("wsse", "UsernameToken", Namespace);
            writer.WriteStartElement("wsse", "Username", Namespace);
            writer.WriteValue(_username);
            writer.WriteEndElement();

            writer.WriteStartElement("wsse", "Password", Namespace);
            writer.WriteValue(_password);
            writer.WriteEndElement();

            writer.WriteEndElement();
        }
Exemplo n.º 17
0
        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.SetType(typeof(SessionSecurityToken));
            MemoryStream stream = new MemoryStream();

            using (XmlDictionaryWriter xmlDictionaryWriter = XmlDictionaryWriter.CreateBinaryWriter(stream, null, null))
            {
                xmlDictionaryWriter.WriteStartElement("SecurityContextToken", "");

                xmlDictionaryWriter.WriteStartElement("Version", "");
                xmlDictionaryWriter.WriteValue("1");
                xmlDictionaryWriter.WriteEndElement();

                xmlDictionaryWriter.WriteElementString("SecureConversationVersion", "", (new Uri("http://schemas.xmlsoap.org/ws/2005/02/sc")).AbsoluteUri);

                xmlDictionaryWriter.WriteElementString("Id", "", "1");

                WriteElementStringAsUniqueId(xmlDictionaryWriter, "ContextId", "", "1");

                xmlDictionaryWriter.WriteStartElement("Key", "");
                xmlDictionaryWriter.WriteBase64(new byte[] { 0x01 }, 0, 1);
                xmlDictionaryWriter.WriteEndElement();

                WriteElementContentAsInt64(xmlDictionaryWriter, "EffectiveTime", "", 1);
                WriteElementContentAsInt64(xmlDictionaryWriter, "ExpiryTime", "", 1);
                WriteElementContentAsInt64(xmlDictionaryWriter, "KeyEffectiveTime", "", 1);
                WriteElementContentAsInt64(xmlDictionaryWriter, "KeyExpiryTime", "", 1);

                xmlDictionaryWriter.WriteStartElement("ClaimsPrincipal", "");
                xmlDictionaryWriter.WriteStartElement("Identities", "");
                xmlDictionaryWriter.WriteStartElement("Identity", "");
                xmlDictionaryWriter.WriteStartElement("BootStrapToken", "");
                xmlDictionaryWriter.WriteValue(B64Payload); // This is where the payload is
                xmlDictionaryWriter.WriteEndElement();
                xmlDictionaryWriter.WriteEndElement();
                xmlDictionaryWriter.WriteEndElement();
                xmlDictionaryWriter.WriteEndElement();

                xmlDictionaryWriter.WriteEndElement();
                xmlDictionaryWriter.Flush();

                stream.Position = 0;

                //Console.WriteLine(Encoding.ASCII.GetString(stream.ToArray()));

                info.AddValue("SessionToken", stream.ToArray());
            }
        }
Exemplo n.º 18
0
 public static void SerializeExpires(XmlDictionaryWriter writer, DateTime?dateTimeFormat, TimeSpan?timeSpanFormat)
 {
     if (dateTimeFormat.HasValue || timeSpanFormat.HasValue)
     {
         writer.WriteStartElement("Expires", "http://schemas.xmlsoap.org/ws/2004/09/enumeration");
         if (!dateTimeFormat.HasValue)
         {
             writer.WriteValue(XmlConvert.ToString(timeSpanFormat.Value));
         }
         else
         {
             writer.WriteValue(XmlConvert.ToString(dateTimeFormat.Value, XmlDateTimeSerializationMode.Utc));
         }
         writer.WriteEndElement();
     }
 }
Exemplo n.º 19
0
        /// <summary>
        /// Called when the header content is serialized using the specified XML writer.
        /// </summary>
        /// <param name="writer">An <see cref="T:System.Xml.XmlDictionaryWriter" />.</param>
        /// <param name="messageVersion">Contains information related to the version of SOAP associated with a message and its exchange.</param>
        /// <exception cref="System.ArgumentNullException"></exception>
        protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }

            //TimeStamp Header
            writer.WriteStartElement(WSUtilityPrefix, TimeStamp, WSUtilityNamespace);
            writer.WriteAttributeString(WSUtilityPrefix, IdAttributeName, WSUtilityNamespace, "Timestamp-" + this.GUID.ToString());
            writer.WriteElementString(CreatedElementName, WSUtilityNamespace, Created);
            writer.WriteElementString(ExpiresElementName, WSUtilityNamespace, Expires);
            writer.WriteEndElement();

            //UserNameToken Header
            writer.WriteStartElement(UsernameTokenPrefix, UsernameTokenName, UsernameTokenNamespace);
            writer.WriteAttributeString(WSUtilityPrefix, IdAttributeName, WSUtilityNamespace, "SecurityToken-" + this.GUID.ToString());
            writer.WriteElementString(UsernameElementName, UsernameTokenNamespace, this.UserName);
            writer.WriteStartElement(UsernameTokenPrefix, PasswordElementName, UsernameTokenNamespace);
            writer.WriteAttributeString(TypeAttributeName, PasswordDigestType);
            writer.WriteValue(PasswordDigest);
            writer.WriteEndElement();
            writer.WriteElementString(NonceElementName, UsernameTokenNamespace, Nonce);
            writer.WriteElementString(CreatedElementName, WSUtilityNamespace, Created);
            writer.WriteEndElement();
        }
        protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
        {
            writer.WriteStartElement("wsse", "UsernameToken", Namespace);
            writer.WriteAttributeString("wsu", "Id", WsuNamespace, Guid.NewGuid().ToString());

            writer.WriteStartElement("wsse", "Username", Namespace);
            writer.WriteValue(_username);
            writer.WriteEndElement();

            writer.WriteStartElement("wsse", "Password", Namespace);
            writer.WriteAttributeString("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
            writer.WriteValue(_password);
            writer.WriteEndElement();

            writer.WriteEndElement();
        }
        internal void Serialize(XmlDictionaryWriter writer, object[] parameters, object returnValue)
        {
            Stream streamValue = GetStreamAndWriteStartWrapperIfNecessary(writer, parameters, returnValue);

            writer.WriteValue(new OperationStreamProvider(streamValue));
            WriteEndWrapperIfNecessary(writer);
        }
    public void WriteXml(XmlWriter writer)
    {
        writer.WriteStartElement("name");
        writer.WriteValue(this.name);
        writer.WriteEndElement();

        writer.WriteStartElement("extension");
        writer.WriteValue(this.extension);
        writer.WriteEndElement();

        writer.WriteStartElement("data");
        XmlDictionaryWriter dictWriter = writer as XmlDictionaryWriter;
        bool isMtom = dictWriter != null && dictWriter is IXmlMtomWriterInitializer;

        if (isMtom)
        {
            dictWriter.WriteValue(new MyStreamProvider(this.stream));
        }
        else
        {
            // fall back to the original behavior
            byte[] buffer = new byte[1000];
            int    bytesRead;
            do
            {
                bytesRead = this.stream.Read(buffer, 0, buffer.Length);
                if (bytesRead > 0)
                {
                    writer.WriteBase64(buffer, 0, bytesRead);
                }
            } while (bytesRead > 0);
        }
        writer.WriteEndElement();
    }
Exemplo n.º 23
0
 protected void WriteClearTextPassword(XmlDictionaryWriter writer)
 {
     writer.WriteStartElement("wsse:Password");
     writer.WriteAttributeString("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
     writer.WriteValue(Password);
     writer.WriteEndElement(); //wsse:Password
 }
Exemplo n.º 24
0
            public void WriteJson(XmlDictionaryWriter writer)
            {
                writer.WriteStartElement(MetadataStrings.TypeString);
                writer.WriteAttributeString("type", "string");
                writer.WriteString(String.Format("{0}{1}{2}", this.TypeName, MetadataStrings.NamespaceMarker, this.TypeNamespace));
                writer.WriteEndElement();

                writer.WriteStartElement(MetadataStrings.KeyString);
                writer.WriteAttributeString("type", "array");
                foreach (string keyitem in this.Key)
                {
                    writer.WriteStartElement("item");
                    writer.WriteAttributeString("type", "string");
                    writer.WriteValue(keyitem);
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();

                writer.WriteStartElement(MetadataStrings.FieldsString);
                writer.WriteAttributeString("type", "object");
                foreach (TypePropertyMetadata field in this.Properties)
                {
                    field.WriteJson(writer);
                }
                writer.WriteEndElement();

                this.WriteValidationRulesMetadata(writer);
            }
Exemplo n.º 25
0
            public void WriteJson(XmlDictionaryWriter writer)
            {
                writer.WriteStartElement(MetadataStrings.NameString);
                writer.WriteAttributeString("type", "string");
                writer.WriteString(this.Name);
                writer.WriteEndElement();

                writer.WriteStartElement(MetadataStrings.ThisKeyString);
                writer.WriteAttributeString("type", "array");
                foreach (string thisKey in this.ThisKeyMembers)
                {
                    writer.WriteStartElement("item");
                    writer.WriteAttributeString("type", "string");
                    writer.WriteString(thisKey);
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();

                writer.WriteStartElement(MetadataStrings.OtherKeyString);
                writer.WriteAttributeString("type", "array");
                foreach (string otherKey in this.OtherKeyMembers)
                {
                    writer.WriteStartElement("item");
                    writer.WriteAttributeString("type", "string");
                    writer.WriteString(otherKey);
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();

                writer.WriteStartElement(MetadataStrings.IsForeignKey);
                writer.WriteAttributeString("type", "boolean");
                writer.WriteValue(this.IsForeignKey);
                writer.WriteEndElement();
            }
        protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
        {
            WsrmFeb2005Dictionary dictionary          = XD.WsrmFeb2005Dictionary;
            XmlDictionaryString   dictionaryNamespace = this.DictionaryNamespace;

            writer.WriteStartElement(dictionary.Identifier, dictionaryNamespace);
            writer.WriteValue(this.sequenceID);
            writer.WriteEndElement();
            writer.WriteStartElement(dictionary.MessageNumber, dictionaryNamespace);
            writer.WriteValue(this.sequenceNumber);
            writer.WriteEndElement();
            if ((base.ReliableMessagingVersion == ReliableMessagingVersion.WSReliableMessagingFebruary2005) && this.lastMessage)
            {
                writer.WriteStartElement(dictionary.LastMessage, dictionaryNamespace);
                writer.WriteEndElement();
            }
        }
Exemplo n.º 27
0
        protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
        {
            WsrmFeb2005Dictionary dictionary   = XD.WsrmFeb2005Dictionary;
            XmlDictionaryString   namespaceUri = WsrmIndex.GetNamespace(this.reliableMessagingVersion);

            writer.WriteStartElement(dictionary.TerminateSequence, namespaceUri);
            writer.WriteStartElement(dictionary.Identifier, namespaceUri);
            writer.WriteValue(this.identifier);
            writer.WriteEndElement();
            if ((this.reliableMessagingVersion == ReliableMessagingVersion.WSReliableMessaging11) && (this.lastMsgNumber > 0L))
            {
                writer.WriteStartElement(DXD.Wsrm11Dictionary.LastMsgNumber, namespaceUri);
                writer.WriteValue(this.lastMsgNumber);
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
        }
Exemplo n.º 28
0
        public byte[] CreateCookieFromSecurityContext(UniqueId contextId, string id, byte[] key, DateTime tokenEffectiveTime, DateTime tokenExpirationTime, UniqueId keyGeneration, DateTime keyEffectiveTime, DateTime keyExpirationTime, ReadOnlyCollection <IAuthorizationPolicy> authorizationPolicies)
        {
            if (contextId == null)
            {
                throw System.ServiceModel.DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("contextId");
            }
            if (key == null)
            {
                throw System.ServiceModel.DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("key");
            }
            MemoryStream        stream   = new MemoryStream();
            XmlDictionaryWriter writer   = XmlDictionaryWriter.CreateBinaryWriter(stream, SctClaimDictionary.Instance, null);
            SctClaimDictionary  instance = SctClaimDictionary.Instance;

            writer.WriteStartElement(instance.SecurityContextSecurityToken, instance.EmptyString);
            writer.WriteStartElement(instance.Version, instance.EmptyString);
            writer.WriteValue(1);
            writer.WriteEndElement();
            if (id != null)
            {
                writer.WriteElementString(instance.Id, instance.EmptyString, id);
            }
            XmlHelper.WriteElementStringAsUniqueId(writer, instance.ContextId, instance.EmptyString, contextId);
            writer.WriteStartElement(instance.Key, instance.EmptyString);
            writer.WriteBase64(key, 0, key.Length);
            writer.WriteEndElement();
            if (keyGeneration != null)
            {
                XmlHelper.WriteElementStringAsUniqueId(writer, instance.KeyGeneration, instance.EmptyString, keyGeneration);
            }
            XmlHelper.WriteElementContentAsInt64(writer, instance.EffectiveTime, instance.EmptyString, tokenEffectiveTime.ToUniversalTime().Ticks);
            XmlHelper.WriteElementContentAsInt64(writer, instance.ExpiryTime, instance.EmptyString, tokenExpirationTime.ToUniversalTime().Ticks);
            XmlHelper.WriteElementContentAsInt64(writer, instance.KeyEffectiveTime, instance.EmptyString, keyEffectiveTime.ToUniversalTime().Ticks);
            XmlHelper.WriteElementContentAsInt64(writer, instance.KeyExpiryTime, instance.EmptyString, keyExpirationTime.ToUniversalTime().Ticks);
            AuthorizationContext authContext = null;

            if (authorizationPolicies != null)
            {
                authContext = AuthorizationContext.CreateDefaultAuthorizationContext(authorizationPolicies);
            }
            if ((authContext != null) && (authContext.ClaimSets.Count != 0))
            {
                DataContractSerializer serializer      = DataContractSerializerDefaults.CreateSerializer(typeof(IIdentity), this.knownTypes, 0x7fffffff);
                DataContractSerializer serializer2     = DataContractSerializerDefaults.CreateSerializer(typeof(ClaimSet), this.knownTypes, 0x7fffffff);
                DataContractSerializer claimSerializer = DataContractSerializerDefaults.CreateSerializer(typeof(Claim), this.knownTypes, 0x7fffffff);
                SctClaimSerializer.SerializeIdentities(authContext, instance, writer, serializer);
                writer.WriteStartElement(instance.ClaimSets, instance.EmptyString);
                for (int i = 0; i < authContext.ClaimSets.Count; i++)
                {
                    SctClaimSerializer.SerializeClaimSet(authContext.ClaimSets[i], instance, writer, serializer2, claimSerializer);
                }
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
            writer.Flush();
            byte[] data = stream.ToArray();
            return(this.securityStateEncoder.EncodeSecurityState(data));
        }
Exemplo n.º 29
0
 private static void WriteCondition(XmlDictionaryWriter writer, String name, String value)
 {
     writer.WriteStartElement("item");
     writer.WriteAttributeString("type", "object");
     writer.WriteStartElement(name);
     writer.WriteValue(value);
     writer.WriteEndElement();
     writer.WriteEndElement();
 }
Exemplo n.º 30
0
 /// <summary>
 /// Writes header
 /// </summary>
 /// <param name="writer"></param>
 /// <param name="messageVersion"></param>
 protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
 {
     writer.WriteAttributeString("IsReferenceParameter", "http://www.w3.org/2005/08/addressing", "true");
     foreach (XmlAttribute attr in _element.Attributes)
     {
         writer.WriteAttributeString(attr.LocalName, attr.NamespaceURI, attr.Value);
     }
     writer.WriteValue(_element.InnerXml);
 }