public async Task <bool> ValidateTokenAsync(string TokenString) { Boolean result = false; try { JwtSecurityToken securityToken = new JwtSecurityToken(TokenString); JwtSecurityTokenHandler securityTokenHandler = new JwtSecurityTokenHandler(); RSACryptoServiceProvider publicAndPrivate = new RSACryptoServiceProvider(2048); var publicAndPrivateKey = await _rsaProvider.GetPrivateAndPublicKeyAsync(); RSAKeyExtensions.FromXmlString(publicAndPrivate, publicAndPrivateKey.pub); TokenValidationParameters validationParameters = new TokenValidationParameters() { ValidIssuer = "http://issuer.com", ValidAudience = "http://mysite.com", IssuerSigningKey = new RsaSecurityKey(publicAndPrivate) }; ClaimsPrincipal claimsPrincipal = securityTokenHandler.ValidateToken(TokenString, validationParameters, out SecurityToken _secToken); result = true; } catch (Exception ex) { result = false; } return(result); }
public async Task <string> GenerateJwtTokenAsync(string username, string password) { if (!_membershipProvider.VerifyUserPassword(username, password)) { return("Wrong access"); } var claims = _membershipProvider.GetUserClaims(username); var publicAndPrivateKey = await _rsaProvider.GetPrivateAndPublicKeyAsync(); RSACryptoServiceProvider PrivateKey = new RSACryptoServiceProvider(2048); RSAKeyExtensions.FromXmlString(PrivateKey, publicAndPrivateKey.priv); IdentityModelEventSource.ShowPII = true; JwtSecurityToken jwtToken = new JwtSecurityToken ( issuer: "http://issuer.com", audience: "http://mysite.com", claims: claims, signingCredentials: new SigningCredentials(new RsaSecurityKey(PrivateKey), SecurityAlgorithms.RsaSha256Signature), expires: DateTime.Now.AddDays(30) ); JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler(); string tokenString = tokenHandler.WriteToken(jwtToken); await SaveToken(tokenString); return(tokenString); }
private byte[] Encrypt(byte[] data, int keySize, string publicKeyXml) { if (data == null || data.Length == 0) { throw new ArgumentException("Data are empty", "data"); } int maxLength = GetMaxDataLength(keySize); if (data.Length > maxLength) { throw new ArgumentException(string.Format("Maximum data length is {0}", maxLength), "data"); } if (!IsKeySizeValid(keySize)) { throw new ArgumentException("Key size is not valid", "keySize"); } if (string.IsNullOrEmpty(publicKeyXml)) { throw new ArgumentException("Key is null or empty", "publicKeyXml"); } using (var provider = new RSACryptoServiceProvider(keySize)) { RSAKeyExtensions.FromXmlString(provider, publicKeyXml); return(provider.Encrypt(data, optimalAsymmetricEncryptionPadding)); } }
/// <summary>Create (if not exists) or load private key for licensing. Should not be used by client software</summary> /// <example> /// <code> /// SimpleLicense myLicenseProvider = SimpleLicense.InitFile("main.key"); /// </code> /// </example> /// <param name="keyFilePath">File path to the key file. If not exists, a new key file will be created.</param> public static SimpleLicense Init(String keyFilePath) { try { SimpleLicense license = null; string xmlString = String.Empty; if (!File.Exists(keyFilePath)) { CreateInitFile(keyFilePath); } xmlString = File.ReadAllText(keyFilePath); license = new SimpleLicense(); RSAKeyExtensions.FromXmlString(license._rsa, xmlString); return(license); } catch (Exception e) { throw e; } }
private byte[] Decrypt(byte[] data, int keySize, string publicAndPrivateKeyXml) { if (data == null || data.Length == 0) { throw new ArgumentException("Data are empty", "data"); } if (!IsKeySizeValid(keySize)) { throw new ArgumentException("Key size is not valid", "keySize"); } if (string.IsNullOrEmpty(publicAndPrivateKeyXml)) { throw new ArgumentException("Key is null or empty", "publicAndPrivateKeyXml"); } using (var provider = new RSACryptoServiceProvider(keySize)) { RSAKeyExtensions.FromXmlString(provider, publicAndPrivateKeyXml); return(provider.Decrypt(data, optimalAsymmetricEncryptionPadding)); } }
/// <summary> /// Login to sugang.inha.ac.kr /// </summary> /// <param name="id"></param> /// <param name="pwd"></param> /// <returns></returns> public static SugangSession Create(string id, string pwd) { // // Reuqest RSA Public Key // string public_key; using (var client = new WebClient()) public_key = client.DownloadString("https://sugang.inha.ac.kr/ITISWebCommon/xml/PublicKey.xml"); var rsa = new RSACryptoServiceProvider(); RSAKeyExtensions.FromXmlString(rsa, public_key); var ide = encrpyt(rsa, id); var pwde = encrpyt(rsa, pwd); // // Get Parameters from Menu.aspx // string menu_aspx; using (var client = new WebClient()) menu_aspx = client.DownloadString("https://sugang.inha.ac.kr/sugang/Menu.aspx"); var document = new HtmlDocument(); document.LoadHtml(menu_aspx); var root_node = document.DocumentNode; var form = root_node.SelectSingleNode("//form[@name='form1']"); var param = new Dictionary <string, string>(); foreach (var input in form.SelectNodes(".//input")) { param.Add(input.GetAttributeValue("name", ""), input.GetAttributeValue("value", "")); } param["hhdencId"] = ide; param["hhdencPw"] = pwde; param.Add("__EVENTTARGET", "ibtnLogin"); param.Add("__EVENTARGUMENT", ""); // // Request Session Cookie // var request = (HttpWebRequest)WebRequest.Create("https://sugang.inha.ac.kr/sugang/Menu.aspx"); pass_common(ref request); request.Method = "POST"; request.Headers.Add("Origin", "https://sugang.inha.ac.kr"); request.Headers.Add(HttpRequestHeader.Cookie, "this.GetLangCode="); var xx = request.Headers.ToString(); var request_stream = new StreamWriter(request.GetRequestStream()); var query = string.Join("&", param.ToList().Select(x => $"{x.Key}={Uri.EscapeDataString(x.Value)}")); request_stream.Write(query); request_stream.Close(); // // Create Session // using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { var cookies = response.Cookies; // Fake response var res = new StreamReader(response.GetResponseStream()).ReadToEnd(); if (cookies.Count == 0 || cookies[0].Name != "ITISSugangHome") { return(ErrorSession); } var ss = new SugangSession { Cookies = cookies }; try { ss.create_itissugang_session(); ss.IsValidITISSugangCookie = true; } catch { } return(ss); } }