JwtService.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Business.StructuredDB;
  2. using Microsoft.IdentityModel.Tokens;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IdentityModel.Tokens.Jwt;
  6. using System.Linq;
  7. using System.Security.Claims;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using Volo.Abp.Application.Services;
  11. namespace Business.Sqe
  12. {
  13. public class JwtService : ApplicationService, IJwtService
  14. {
  15. public JwtService()
  16. {
  17. }
  18. public string BuildToken(IEnumerable<Claim> claims, JwtOptions options)
  19. {
  20. //过期时间
  21. TimeSpan timeSpan = TimeSpan.FromSeconds(options.ExpireSeconds);//token过期时间
  22. var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(options.Key));//加密的token密钥
  23. var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);//签名证书,其值为securityKey和HmacSha256Signature算法
  24. var tokenDescriptor = new JwtSecurityToken(options.Issuer, options.Audience, claims, expires: DateTime.Now.Add(timeSpan), signingCredentials: credentials);//表示jwt token的描述信息,其值包括Issuer签发方,Audience接收方,Claims载荷,过期时间和签名证书
  25. return new JwtSecurityTokenHandler().WriteToken(tokenDescriptor);//使用该方法转换为字符串形式的jwt token返回
  26. }
  27. public String ValidateToken(string token, JwtOptions options)
  28. {
  29. if (token == null)
  30. return null;
  31. var tokenHandler = new JwtSecurityTokenHandler();
  32. var key = Encoding.UTF8.GetBytes(options.Key);
  33. try
  34. {
  35. tokenHandler.ValidateToken(token, new TokenValidationParameters
  36. {
  37. ValidateIssuerSigningKey = true,
  38. IssuerSigningKey = new SymmetricSecurityKey(key),
  39. ValidateIssuer = false,
  40. ValidateAudience = false,
  41. ClockSkew = TimeSpan.Zero
  42. }, out SecurityToken validatedToken);
  43. var jwtToken = (JwtSecurityToken)validatedToken;
  44. return jwtToken.Issuer;
  45. }
  46. catch
  47. {
  48. return null;
  49. }
  50. }
  51. }
  52. }