public (string, DateTime) BuildJwtToken(Claim[] claims, JwtOptions options) { options.NotNull(nameof(options)); claims.NotNull(nameof(claims)); if (options.SecretKey.IsNullOrEmpty()) { throw new AppException("密钥不能为空!!"); } DateTime now = DateTime.UtcNow; SecurityKey key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(options.SecretKey)); SigningCredentials credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature); double minutes = options.ExpireMins <= 0 ? 5 : options.ExpireMins; DateTime expires = now.AddMinutes(minutes); SecurityTokenDescriptor descriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(claims), Audience = options.Audience ?? "Destiny", Issuer = options.Issuer ?? "Destiny", SigningCredentials = credentials, NotBefore = now, IssuedAt = now, Expires = expires }; SecurityToken token = _tokenHandler.CreateToken(descriptor); return(_tokenHandler.WriteToken(token), expires); }