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); } }
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); }
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); } }