/// <summary> /// 创建令牌 /// </summary> /// <param name="claims">声明列表</param> /// <param name="options">Jwt选项配置</param> /// <param name="tokenType">Jwt令牌类型</param> private (string, DateTime) CreateToken(IEnumerable <Claim> claims, JwtOptions options, JsonWebTokenType tokenType) { var secret = options.Secret; if (secret == null) { throw new ArgumentNullException(nameof(secret)); } var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature); var now = DateTime.UtcNow; var minutes = tokenType == JsonWebTokenType.AccessToken ? options.AccessExpireMinutes > 0 ? options.AccessExpireMinutes : 5 // 默认5分钟 : options.RefreshExpireMinutes > 0 ? options.RefreshExpireMinutes : 10080; // 默认7天 var expires = now.AddMinutes(minutes); //var descriptor = new SecurityTokenDescriptor() //{ // Subject = new ClaimsIdentity(claims), // Audience = options.Audience, // Issuer = options.Issuer, // SigningCredentials = credentials, // NotBefore = now, // IssuedAt = now, // Expires = expires, //}; //var token = _tokenHandler.CreateToken(descriptor); //var accessToken = _tokenHandler.WriteToken(token); var jwt = new JwtSecurityToken(options.Issuer, options.Audience, claims, now, expires, credentials); var accessToken = _tokenHandler.WriteToken(jwt); return(accessToken, expires); }
/// <summary> /// 创建令牌 /// </summary> /// <param name="tokenHandler">Jwt安全令牌处理器</param> /// <param name="claims">声明列表</param> /// <param name="options">Jwt选项配置</param> /// <param name="tokenType">Jwt令牌类型</param> public static (string token, DateTime expires) CreateToken(JwtSecurityTokenHandler tokenHandler, IEnumerable <Claim> claims, JwtOptions options, JsonWebTokenType tokenType) { var secret = options.Secret; if (secret == null) { throw new ArgumentNullException(nameof(secret)); } var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature); var now = DateTime.UtcNow; var minutes = tokenType == JsonWebTokenType.AccessToken ? options.AccessExpireMinutes > 0 ? options.AccessExpireMinutes : 5 // 默认5分钟 : options.RefreshExpireMinutes > 0 ? options.RefreshExpireMinutes : 10080; // 默认7天 var expires = now.AddMinutes(minutes); var jwt = new JwtSecurityToken(options.Issuer, options.Audience, claims, now, expires, credentials); var accessToken = tokenHandler.WriteToken(jwt); return(accessToken, expires); }