namespace ZhiYi.Core.Application.Middleware { public class TokenService { private readonly IConfiguration _configuration; private readonly IDatabase _redis; public TokenService(IConfiguration configuration, IConnectionMultiplexer redis) { _configuration = configuration; _redis = redis.GetDatabase(); } public string GenerateTokenAsync(long userid, string username) { var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"])); var expiryInMinutes = int.Parse(_configuration["Jwt:ExpiryInMinutes"]); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: _configuration["Jwt:Issuer"], audience: _configuration["Jwt:Audience"], expires: DateTime.Now.AddMinutes(expiryInMinutes), claims: new[] { new Claim(ClaimTypes.Name, username), // 设置用户名 new Claim(ClaimTypes.Sid, userid.ToString()) //用户ID }, signingCredentials: credentials ); var tokenString = new JwtSecurityTokenHandler().WriteToken(token); // 将 Token 存储到 Redis 有效时间30分钟 _redis.StringSet($"token:{userid}", tokenString, TimeSpan.FromMinutes(30)); return tokenString; } /// /// 获取签名 /// /// /// /// /// /// public string GenerateSignature(string appSecret, string path, string timestamp, string token) { using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(appSecret)); var data = $"{path.ToLower()}|{timestamp}|{token}"; var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(data)); return Convert.ToBase64String(hash); } public bool ValidateToken(string userid, string token) { var storedToken = _redis.StringGet($"token:{userid}"); return storedToken == token; } } }