UserToken.cs 1.7 KB

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