UserToken.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using Admin.Core.Common.Attributes;
  2. using Admin.Core.Common.Configs;
  3. using Admin.Core.Common.Extensions;
  4. using Microsoft.IdentityModel.Tokens;
  5. using System;
  6. using System.IdentityModel.Tokens.Jwt;
  7. using System.Linq;
  8. using System.Security.Claims;
  9. using System.Text;
  10. namespace Admin.Core.Common.Auth
  11. {
  12. [SingleInstance]
  13. public class UserToken : IUserToken
  14. {
  15. private readonly JwtConfig _jwtConfig;
  16. public UserToken(JwtConfig jwtConfig)
  17. {
  18. _jwtConfig = jwtConfig;
  19. }
  20. public string Create(Claim[] claims)
  21. {
  22. var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtConfig.SecurityKey));
  23. var signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
  24. var timestamp = DateTime.Now.AddMinutes(_jwtConfig.Expires + _jwtConfig.RefreshExpires).ToTimestamp().ToString();
  25. claims = claims.Append(new Claim(ClaimAttributes.RefreshExpires, timestamp)).ToArray();
  26. var token = new JwtSecurityToken(
  27. issuer: _jwtConfig.Issuer,
  28. audience: _jwtConfig.Audience,
  29. claims: claims,
  30. notBefore: DateTime.Now,
  31. expires: DateTime.Now.AddMinutes(_jwtConfig.Expires),
  32. signingCredentials: signingCredentials
  33. );
  34. return new JwtSecurityTokenHandler().WriteToken(token);
  35. }
  36. public Claim[] Decode(string jwtToken)
  37. {
  38. var jwtSecurityTokenHandler = new JwtSecurityTokenHandler();
  39. var jwtSecurityToken = jwtSecurityTokenHandler.ReadJwtToken(jwtToken);
  40. return jwtSecurityToken?.Claims?.ToArray();
  41. }
  42. }
  43. }