protected Task <IPrincipal> AuthenticateJwtToken(string token, JwtIssuer jwtProvider)
        {
            if (this.ValidateToken(jwtProvider, token, out var claimsPrincipal))
            {
                // based on username to get more information from database in order to build local identity
                var claims = claimsPrincipal.Claims;

                var        identity = new ClaimsIdentity(claims, "Jwt");
                IPrincipal user     = new ClaimsPrincipal(identity);

                return(Task.FromResult(user));
            }

            return(Task.FromResult <IPrincipal>(null));
        }
        private bool ValidateToken(JwtIssuer jwtIssuer, string token, out ClaimsPrincipal claimsPrincipal)
        {
            claimsPrincipal = jwtIssuer.GetPrincipal(token);
            var identity = claimsPrincipal?.Identity as ClaimsIdentity;

            if (identity == null)
            {
                return(false);
            }

            if (!identity.IsAuthenticated)
            {
                return(false);
            }

            return(true);
        }