/// <summary>
        /// Generates a serialized JWT
        /// </summary>
        /// <param name="username">The username that will be put in the token</param>
        public static string GenerateToken(string username, int companyID)
        {
            var symterticKey = Convert.FromBase64String(HBTokenParameters.GetSecret());
            var tokenHandler = new JwtSecurityTokenHandler();

            var now             = DateTime.UtcNow;
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new System.Security.Claims.ClaimsIdentity(new[]
                {
                    new Claim(ClaimTypes.Name, username),
                    new Claim(ClaimTypes.UserData, Convert.ToString(companyID))
                }),

                Audience = HBTokenParameters.GetAudience(),

                Issuer = HBTokenParameters.GetIssuer(),

                Expires = now.AddDays(30),

                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(symterticKey), SecurityAlgorithms.HmacSha256Signature)
            };

            var stoken = tokenHandler.CreateToken(tokenDescriptor);
            var token  = tokenHandler.WriteToken(stoken);

            return(token);
        }
        /// <summary>
        /// Validate the token and return the claims principle or else return null
        /// </summary>
        public static ClaimsPrincipal GetPrincipal(string token)
        {
            try
            {
                var tokenHandler = new JwtSecurityTokenHandler();
                var jwtToken     = tokenHandler.ReadToken(token) as JwtSecurityToken;

                if (jwtToken == null)
                {
                    return(null);
                }

                var symmetricKey = Convert.FromBase64String(HBTokenParameters.GetSecret());

                var validationParameters = new TokenValidationParameters()
                {
                    RequireExpirationTime = true,
                    ValidateIssuer        = true,
                    ValidIssuer           = HBTokenParameters.GetIssuer(),
                    ValidateAudience      = true,
                    ValidAudience         = HBTokenParameters.GetAudience(),
                    IssuerSigningKey      = new SymmetricSecurityKey(symmetricKey)
                };

                var principal = tokenHandler.ValidateToken(token, validationParameters, out SecurityToken securityToken);

                return(principal);
            }
            catch (Exception)
            {
                return(null);
            }
        }
 public static TokenValidationParameters GetTokenValidationParameters()
 {
     return(HBTokenParameters.GetTokenValidationParameters());
 }