private async Task <string> GenerateJwtTokenAsync(string email, User user) { if (!_jwtOptions.IsValid()) { throw new Exception("Missing JWT configurations."); } var claims = new List <Claim> { new Claim(JwtRegisteredClaimNames.Sub, email), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()) }; var roles = await _userManager.GetRolesAsync(user); claims.AddRange(roles.Select(role => new Claim(ClaimsIdentity.DefaultRoleClaimType, role))); var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtOptions.Key)); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var expires = DateTime.Now.AddDays(_jwtOptions.ExpireDays); var token = new JwtSecurityToken( _jwtOptions.Issuer, _jwtOptions.Issuer, claims, expires: expires, signingCredentials: creds ); return(new JwtSecurityTokenHandler().WriteToken(token)); }