/// <summary>
        ///
        /// </summary>
        /// <param name="courierId"></param>
        /// <param name="remember"></param>
        /// <returns></returns>
        public async Task <string> GenerateJWTokenAsync(int courierId, bool remember = false)
        {
            var courier = await this.GetCourierByIdAsync(courierId);

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

            var claims = new List <Claim>
            {
                new Claim(ClaimTypes.Name, courier.Phone),
                new Claim(ClaimTypes.NameIdentifier, courier.Id.ToString()),
                new Claim("id", courier.Id.ToString()),
            };

            //
            JwtSettingsDto jwtSettings = GetSettings();

            var symmetricSecurityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.Secret));
            SigningCredentials _signingCredentials = new SigningCredentials(symmetricSecurityKey, SecurityAlgorithms.HmacSha256);

            var accessExpiration = remember ? jwtSettings.RememberMeExpiration : jwtSettings.AccessExpiration;

            var jwtToken = new JwtSecurityToken(
                jwtSettings.Issuer,
                jwtSettings.Audience,
                claims,
                expires: DateTime.UtcNow.AddMinutes(accessExpiration),
                signingCredentials: _signingCredentials
                );
            JwtSecurityTokenHandler _jwtSecurityTokenHandler = new JwtSecurityTokenHandler();

            return(_jwtSecurityTokenHandler.WriteToken(jwtToken));
        }
 private static TokenValidationParameters GetTokenValidationParameters(JwtSettingsDto jwtSettings)
 {
     return(new TokenValidationParameters
     {
         ValidateIssuerSigningKey = true,
         IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(jwtSettings.Secret)),
         ValidIssuer = jwtSettings.Issuer,
         ValidAudience = jwtSettings.Audience,
         ValidateIssuer = false,
         ValidateAudience = false,
         ValidateLifetime = true,
         ClockSkew = TimeSpan.Zero,
     });
 }