public string GetSamlTokenFromGss(ServerDto serverDto, string bet, int lifeTimeSeconds=300) { var soapString = XmlResourceHelper.GetResourceXml("Vmware.Tools.RestSsoAdminSnapIn.Service.xml.BETLoginRequest.xml"); var dt = DateTime.Now; dt = TimeZoneInfo.ConvertTimeToUtc(dt); ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; var dtEnd = dt.AddSeconds(lifeTimeSeconds); string format = "yyyy-MM-ddTHH:mm:ss.fffZ"; var dt1 = dt.ToString(format); var dt2 = dtEnd.ToString(format); soapString = string.Format(soapString, dt1, dt2, dt1, dt2, bet); var customHeaders = new Dictionary<string, string>(); customHeaders.Add("SOAPAction", "http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue"); var headers = ServiceHelper.AddHeaders("text/xml"); var url = serverDto.Url; var requestConfig = new RequestSettings { Method = HttpMethod.Post, }; var responseFromServer = _webRequestManager.GetResponse(url, requestConfig, headers, customHeaders, soapString); XmlDocument doc = new XmlDocument(); doc.PreserveWhitespace = false; using (var reader = new StringReader(responseFromServer)) doc.Load(reader); var node = doc.GetElementsByTagName("saml2:Assertion")[0]; if (node != null) return node.OuterXml; else throw new Exception(responseFromServer); }
public AuthTokenDto Authenticate(ServerDto serverDto, LoginDto loginDto, string clientId) { var url = string.Format(ServiceConfigManager.SamlLegacyEndPoint, serverDto.Protocol, serverDto.ServerName, serverDto.Port, serverDto.StsUrl + "/" + loginDto.TenantName); string soapString = XmlResourceHelper.GetResourceXml("Vmware.Tools.RestSsoAdminSnapIn.Service.xml.SAMLRequest.xml"); int lifeInSeconds = 300; var dt = DateTime.Now; dt = TimeZoneInfo.ConvertTimeToUtc(dt); var dtEnd = dt.AddSeconds(lifeInSeconds); string format = "yyyy-MM-ddTHH:mm:ss.fffZ"; var pass = WrapInCDATA(loginDto.Pass); var principalName = loginDto.User + "@" + loginDto.DomainName; soapString = string.Format(soapString, dt.ToString(format), dtEnd.ToString(format), principalName, pass, dt.ToString(format), dtEnd.ToString(format)); ServicePointManager.ServerCertificateValidationCallback = delegate { return(true); }; //var data = string.Format(ServiceConfigManager.LoginArguments, loginDto.User, loginDto.Pass, loginDto.DomainName, clientId); var requestConfig = new RequestSettings { Method = HttpMethod.Post, }; var headers = ServiceHelper.AddHeaders("text/xml"); var customHeaders = new Dictionary <string, string>(); customHeaders.Add("SOAPAction", "http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue"); var responseFromServer = _webRequestManager.GetResponse(url, requestConfig, headers, customHeaders, soapString); XmlDocument doc = new XmlDocument(); doc.PreserveWhitespace = false; using (var reader = new StringReader(responseFromServer)) doc.Load(reader); var node = doc.GetElementsByTagName("saml2:Assertion")[0]; var signature = doc.GetElementsByTagName("ds:SignatureValue")[0]; var rawToken = string.Empty; if (node != null) { rawToken = node.OuterXml; } byte[] bytes = System.Text.Encoding.UTF8.GetBytes(rawToken); rawToken = Convert.ToBase64String(bytes); var token = new Token(rawToken, serverDto.TokenType) { Raw = rawToken, ClientId = clientId, Signature = signature.InnerXml, TokenType = TokenType.SAML.ToString() }; return(new AuthTokenDto(Refresh) { Token = token, ClaimsPrincipal = null, Login = loginDto, ServerDto = serverDto }); throw new Exception(responseFromServer); }
public string GetSamlTokenFromCertificate(ServerDto serverDto, X509Certificate2 cert, RSACryptoServiceProvider rsaKey) { var soapString = XmlResourceHelper.GetResourceXml("Vmware.Tools.RestSsoAdminSnapIn.Service.xml.SamlTokenByCertificate.xml"); ServicePointManager.ServerCertificateValidationCallback = delegate { return(true); }; string signed = ""; var dt = DateTime.Now; var dtStart = TimeZoneInfo.ConvertTimeToUtc(dt); var dtEnd = dtStart.AddMinutes(10); string format = "yyyy-MM-ddTHH:mm:ss.fffZ"; var certString = Convert.ToBase64String(cert.RawData); string dtStartStr = dtStart.ToString(format); string dtEndStr = dtEnd.ToString(format); soapString = string.Format(soapString, dtStartStr, dtEndStr, certString, dtStartStr, dtEndStr); signed = SigningHelper.SignXmlFile(soapString, rsaKey); string xml2 = XmlResourceHelper.GetResourceXml("Vmware.Tools.RestSsoAdminSnapIn.Service.xml.SamlTokenByCertificate2.xml"); xml2 = string.Format(xml2, dtStartStr, dtEndStr, certString, signed, dtStartStr, dtEndStr); XmlDocument doc = new XmlDocument(); doc.PreserveWhitespace = false; doc.LoadXml(xml2); soapString = doc.InnerXml; var customHeaders = new Dictionary <string, string>(); customHeaders.Add("SOAPAction", "http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue"); var headers = ServiceHelper.AddHeaders("text/xml"); var url = serverDto.Url; var requestConfig = new RequestSettings { Method = HttpMethod.Post, }; var token = _webRequestManager.GetResponse(url, requestConfig, headers, customHeaders, soapString); XmlDocument doc2 = new XmlDocument(); doc2.PreserveWhitespace = false; doc2.LoadXml(token); var node = doc2.GetElementsByTagName("saml2:Assertion")[0]; if (node != null) { return(node.OuterXml); } else { throw new Exception(token); } }
public string GetSamlTokenFromToken(ServerDto serverDto, string tokenXML, X509Certificate2 cert, RSACryptoServiceProvider rsaKey) { var soapString = XmlResourceHelper.GetResourceXml("Vmware.Tools.RestSsoAdminSnapIn.Service.xml.SamlTokenByToken.xml"); ServicePointManager.ServerCertificateValidationCallback = delegate { return(true); }; string signed = ""; var dt = DateTime.Now; var dtStart = TimeZoneInfo.ConvertTimeToUtc(dt); var dtEnd = dtStart.AddMinutes(10); string format = "yyyy-MM-ddTHH:mm:ss.fffZ"; var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(tokenXML); var samlAssertion = xmlDoc.GetElementsByTagName("Assertion", "urn:oasis:names:tc:SAML:2.0:assertion"); var certString = Convert.ToBase64String(cert.RawData); string dtStartStr = dtStart.ToString(format); string dtEndStr = dtEnd.ToString(format); soapString = string.Format(soapString, dtStartStr, dtEndStr, certString, samlAssertion[0].OuterXml, dtStartStr, dtEndStr); //var rsaKey = PrivateKeyHelper.DecodeRSAPrivateKey(Convert.FromBase64String(keyString)); //var rsaKey = (RSACryptoServiceProvider)cert.PrivateKey; signed = SigningHelper.SignXmlFile(soapString, rsaKey); string xml2 = XmlResourceHelper.GetResourceXml("Vmware.Tools.RestSsoAdminSnapIn.Service.xml.SamlTokenByToken2.xml"); xml2 = string.Format(xml2, dtStartStr, dtEndStr, certString, samlAssertion[0].OuterXml, signed, dtStartStr, dtEndStr); XmlDocument doc = new XmlDocument(); doc.PreserveWhitespace = false; doc.LoadXml(xml2); soapString = doc.InnerXml; var customHeaders = new Dictionary <string, string>(); customHeaders.Add("SOAPAction", "http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue"); var headers = ServiceHelper.AddHeaders("text/xml"); var url = serverDto.Url; var requestConfig = new RequestSettings { Method = HttpMethod.Post, }; var response = _webRequestManager.GetResponse(url, requestConfig, headers, customHeaders, soapString); return(response); }
private void Parse(string filename) { var xml = XmlResourceHelper.GetResourceXml(filename); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); if (xmlDoc.ChildNodes != null && xmlDoc.ChildNodes.Count > 1 && xmlDoc.ChildNodes[1].ChildNodes != null) { foreach (XmlNode node in xmlDoc.ChildNodes[1].ChildNodes) { var key = node.Attributes["name"].Value; var value = node.InnerText; value.Replace("&", "&"); _config.Add(key, value); } } }