コード例 #1
0
        private static void PopulateCache(Dictionary <IssuedTokenCacheBase.Key, GenericXmlSecurityToken> cache, Stream stream)
        {
            XmlTextReader xmlTextReader = new XmlTextReader(stream);

            while (xmlTextReader.IsStartElement("Entry"))
            {
                xmlTextReader.ReadStartElement();
                Uri    target = new Uri(xmlTextReader.ReadElementString("Target"));
                string text   = xmlTextReader.ReadElementString("Issuer");
                Uri    issuer = string.IsNullOrEmpty(text) ? null : new Uri(text);
                xmlTextReader.ReadStartElement("Token");
                xmlTextReader.ReadStartElement("XML");
                XmlDocument xmlDocument = new XmlDocument();
                XmlElement  tokenXml    = xmlDocument.ReadNode(xmlTextReader) as XmlElement;
                xmlTextReader.ReadEndElement();
                byte[] key = Convert.FromBase64String(xmlTextReader.ReadElementString("Key"));
                xmlTextReader.ReadElementString("Id");
                DateTime effectiveTime  = Convert.ToDateTime(xmlTextReader.ReadElementString("ValidFrom"));
                DateTime expirationTime = Convert.ToDateTime(xmlTextReader.ReadElementString("ValidTo"));
                WSSecurityTokenSerializer wssecurityTokenSerializer = new WSSecurityTokenSerializer();
                xmlTextReader.ReadStartElement("InternalTokenReference");
                SecurityKeyIdentifierClause internalTokenReference = wssecurityTokenSerializer.ReadKeyIdentifierClause(xmlTextReader);
                xmlTextReader.ReadEndElement();
                xmlTextReader.ReadStartElement("ExternalTokenReference");
                SecurityKeyIdentifierClause externalTokenReference = wssecurityTokenSerializer.ReadKeyIdentifierClause(xmlTextReader);
                xmlTextReader.ReadEndElement();
                xmlTextReader.ReadEndElement();
                xmlTextReader.ReadEndElement();
                List <IAuthorizationPolicy> list  = new List <IAuthorizationPolicy>();
                GenericXmlSecurityToken     value = new GenericXmlSecurityToken(tokenXml, new BinarySecretSecurityToken(key), effectiveTime, expirationTime, internalTokenReference, externalTokenReference, new ReadOnlyCollection <IAuthorizationPolicy>(list));
                cache.Add(new IssuedTokenCacheBase.Key(target, issuer), value);
            }
        }
コード例 #2
0
        public Microsoft.ResourceManagement.WebServices.Client.ContextualSecurityToken GetContextTokenFromResponse(ContextMessageProperty context)
        {
            Microsoft.ResourceManagement.WebServices.Client.ContextualSecurityToken returnToken = null;
            if (RequestedSecurityToken != null)
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(new XmlNodeReader(RequestedSecurityToken));
                XmlNamespaceManager nsManager = new XmlNamespaceManager(xmlDoc.NameTable);
                nsManager.AddNamespace("saml", "urn:oasis:names:tc:SAML:1.0:assertion");

                DateTime effectiveTime = DateTime.Parse(
                    RequestedSecurityToken.SelectSingleNode(
                        "saml:Conditions/@NotBefore",
                        nsManager
                        ).Value);
                DateTime expirationTime = DateTime.Parse(
                    RequestedSecurityToken.SelectSingleNode(
                        "saml:Conditions/@NotOnOrAfter",
                        nsManager
                        ).Value);
                WSSecurityTokenSerializer serializer          = new WSSecurityTokenSerializer();
                SecurityToken             requestedProofToken =
                    serializer.ReadToken(
                        new XmlNodeReader(this.RequestedProofToken),
                        new SecurityContextSecurityTokenResolver(Int32.MaxValue, false));
                SecurityKeyIdentifierClause requestedUnattachedReference =
                    serializer.ReadKeyIdentifierClause(new XmlNodeReader(RequestedUnattachedReference));
                SecurityKeyIdentifierClause requestedAttachedReference =
                    serializer.ReadKeyIdentifierClause(new XmlNodeReader(RequestedAttachedReference));

                returnToken = new ContextualSecurityToken(
                    new GenericXmlSecurityToken(
                        RequestedSecurityToken,
                        requestedProofToken,
                        effectiveTime,
                        expirationTime,
                        requestedUnattachedReference,
                        requestedAttachedReference,
                        new ReadOnlyCollection <IAuthorizationPolicy>(new List <IAuthorizationPolicy>())
                        ), context);
            }
            return(returnToken);
        }
コード例 #3
0
        static void PopulateCache(Dictionary <Key, GenericXmlSecurityToken> cache, Stream stream)
        {
            XmlTextReader reader = new XmlTextReader(stream);

            while (reader.IsStartElement("Entry"))
            {
                reader.ReadStartElement();
                Uri    target    = new Uri(reader.ReadElementString("Target"));
                string issuerStr = reader.ReadElementString("Issuer");
                Uri    issuer    = string.IsNullOrEmpty(issuerStr) ? null : new Uri(issuerStr);

                reader.ReadStartElement("Token");
                reader.ReadStartElement("XML");
                XmlDocument doc      = new XmlDocument();
                XmlElement  tokenXml = doc.ReadNode(reader) as XmlElement;
                reader.ReadEndElement();
                byte[] key = Convert.FromBase64String(reader.ReadElementString("Key"));
                reader.ReadElementString("Id");
                DateTime validFrom = Convert.ToDateTime(reader.ReadElementString("ValidFrom"));
                DateTime validTo   = Convert.ToDateTime(reader.ReadElementString("ValidTo"));
                WSSecurityTokenSerializer serializer = new WSSecurityTokenSerializer();
                reader.ReadStartElement("InternalTokenReference");
                SecurityKeyIdentifierClause internalReference = serializer.ReadKeyIdentifierClause(reader);
                reader.ReadEndElement();
                reader.ReadStartElement("ExternalTokenReference");
                SecurityKeyIdentifierClause externalReference = serializer.ReadKeyIdentifierClause(reader);
                reader.ReadEndElement();
                reader.ReadEndElement(); // token
                reader.ReadEndElement(); // entry

                List <IAuthorizationPolicy> policies = new List <IAuthorizationPolicy>();
                GenericXmlSecurityToken     token    = new GenericXmlSecurityToken(tokenXml, new BinarySecretSecurityToken(key), validFrom, validTo, internalReference, externalReference,
                                                                                   new ReadOnlyCollection <IAuthorizationPolicy>(policies));
                cache.Add(new Key(target, issuer), token);
            }
        }