/// <summary> /// Get the userid from the token if the token is not expired /// </summary> /// <param name="token"></param> /// <returns></returns> public int?GetUserIdFromToken(string token) { string key = Properties.Settings.Default.jwtKey; var decodedToken = JWTUtilities.Decode(token, key); var data = JsonConvert.DeserializeObject <Dictionary <string, object> >(decodedToken); object userId, exp; data.TryGetValue("userId", out userId); data.TryGetValue("exp", out exp); if (exp != null) { var validTo = FromUnixTime(long.Parse(exp.ToString())); if (DateTime.Compare(validTo, DateTime.UtcNow) <= 0) { return(null); } } return(Convert.ToInt32(userId)); }
private static ClaimsPrincipal ValidateToken(string token, string secret, bool checkExpiration) { var payloadJson = JWTUtilities.Decode(token, secret); var payloadData = JsonConvert.DeserializeObject <Dictionary <string, object> >(payloadJson); object exp; if (payloadData != null && (checkExpiration && payloadData.TryGetValue("exp", out exp))) { var validTo = FromUnixTime(long.Parse(exp.ToString())); //Disable token expiration check /*if (DateTime.Compare(validTo, DateTime.UtcNow) <= 0) * { * throw new Exception( * string.Format("Token is expired. Expiration: '{0}'. Current: '{1}'", validTo, DateTime.UtcNow)); * }*/ } var subject = new ClaimsIdentity("Federation", ClaimTypes.Name, ClaimTypes.Role); var claims = new List <Claim>(); if (payloadData != null) { foreach (var pair in payloadData) { var claimType = pair.Key; var source = pair.Value as ArrayList; if (source != null) { claims.AddRange(from object item in source select new Claim(claimType, item.ToString(), ClaimValueTypes.String)); continue; } switch (pair.Key) { case "name": claims.Add(new Claim(ClaimTypes.Name, pair.Value.ToString(), ClaimValueTypes.String)); break; case "surname": claims.Add(new Claim(ClaimTypes.Surname, pair.Value.ToString(), ClaimValueTypes.String)); break; case "email": claims.Add(new Claim(ClaimTypes.Email, pair.Value.ToString(), ClaimValueTypes.String)); break; case "role": claims.Add(new Claim(ClaimTypes.Role, pair.Value.ToString(), ClaimValueTypes.String)); break; case "userId": claims.Add(new Claim(ClaimTypes.UserData, pair.Value.ToString(), ClaimValueTypes.Integer)); break; default: claims.Add(new Claim(claimType, pair.Value.ToString(), ClaimValueTypes.String)); break; } } } subject.AddClaims(claims); return(new ClaimsPrincipal(subject)); }