static void AddToDigest(SspiNegotiationTokenAuthenticatorState sspiState, RequestSecurityTokenResponse rstr, bool wasReceived)
        {
            MemoryStream        stream = new MemoryStream();
            XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(stream);

            if (wasReceived)
            {
                rstr.RequestSecurityTokenResponseXml.WriteTo(writer);
            }
            else
            {
                rstr.WriteTo(writer);
            }
            writer.Flush();
            AddToDigest(sspiState.NegotiationDigest, stream);
        }
        void AddToDigest(SspiNegotiationTokenProviderState sspiState, RequestSecurityTokenResponse rstr, bool wasReceived, bool isFinalRstr)
        {
            MemoryStream        stream = new MemoryStream();
            XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(stream);

            if (!wasReceived)
            {
                rstr.WriteTo(writer);
            }
            else
            {
                if (!isFinalRstr)
                {
                    rstr.RequestSecurityTokenResponseXml.WriteTo(writer);
                }
                else
                {
                    XmlElement     rstrClone     = (XmlElement)rstr.RequestSecurityTokenResponseXml.CloneNode(true);
                    List <XmlNode> nodesToRemove = new List <XmlNode>(2);
                    for (int i = 0; i < rstrClone.ChildNodes.Count; ++i)
                    {
                        XmlNode child = (rstrClone.ChildNodes[i]);
                        if (this.StandardsManager.TrustDriver.IsRequestedSecurityTokenElement(child.LocalName, child.NamespaceURI))
                        {
                            nodesToRemove.Add(child);
                        }
                        else if (this.StandardsManager.TrustDriver.IsRequestedProofTokenElement(child.LocalName, child.NamespaceURI))
                        {
                            nodesToRemove.Add(child);
                        }
                    }
                    for (int i = 0; i < nodesToRemove.Count; ++i)
                    {
                        rstrClone.RemoveChild(nodesToRemove[i]);
                    }
                    rstrClone.WriteTo(writer);
                }
            }
            writer.Flush();
            AddToDigest(sspiState.NegotiationDigest, stream);
        }
Exemple #3
0
        private void AddToDigest(SspiNegotiationTokenProviderState sspiState, RequestSecurityTokenResponse rstr, bool wasReceived, bool isFinalRstr)
        {
            MemoryStream        stream = new MemoryStream();
            XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(stream);

            if (!wasReceived)
            {
                rstr.WriteTo(writer);
            }
            else if (!isFinalRstr)
            {
                rstr.RequestSecurityTokenResponseXml.WriteTo(writer);
            }
            else
            {
                XmlElement element             = (XmlElement)rstr.RequestSecurityTokenResponseXml.CloneNode(true);
                List <System.Xml.XmlNode> list = new List <System.Xml.XmlNode>(2);
                for (int i = 0; i < element.ChildNodes.Count; i++)
                {
                    System.Xml.XmlNode item = element.ChildNodes[i];
                    if (base.StandardsManager.TrustDriver.IsRequestedSecurityTokenElement(item.LocalName, item.NamespaceURI))
                    {
                        list.Add(item);
                    }
                    else if (base.StandardsManager.TrustDriver.IsRequestedProofTokenElement(item.LocalName, item.NamespaceURI))
                    {
                        list.Add(item);
                    }
                }
                for (int j = 0; j < list.Count; j++)
                {
                    element.RemoveChild(list[j]);
                }
                element.WriteTo(writer);
            }
            writer.Flush();
            AddToDigest(sspiState.NegotiationDigest, stream);
        }