Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

JwtManager.cs 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using BlackRock.Reporting.API.Core.Models;
  2. using Microsoft.AspNetCore.Identity;
  3. using Microsoft.IdentityModel.Tokens;
  4. using System.IdentityModel.Tokens.Jwt;
  5. using System.Security.Claims;
  6. namespace BlackRock.Reporting.API.Authentication
  7. {
  8. public class JwtManager : IJwtManager
  9. {
  10. //private string Secret = "db3OIsj+BXE9NZDy0t8W3TcNekrF+2d/1sFnWG4HnV8TZY30iTOdtVWJG8abWvB1GlOgJuQZdcF2Luqm/hccMw==";
  11. private readonly IConfiguration configuration;
  12. private readonly string Secret;
  13. public JwtManager(IConfiguration configuration)
  14. {
  15. this.configuration = configuration;
  16. Secret = configuration["SecurityKey"];
  17. }
  18. public string GenerateToken(string username, int expireMinutes = 20)
  19. {
  20. var symmetricKey = Convert.FromBase64String(Secret);
  21. var tokenHandler = new JwtSecurityTokenHandler();
  22. var now = DateTime.UtcNow;
  23. var tokenDescriptor = new SecurityTokenDescriptor
  24. {
  25. Subject = new ClaimsIdentity(new[]
  26. {
  27. new Claim(ClaimTypes.Name, username)
  28. }),
  29. Expires = now.AddMinutes(Convert.ToInt32(expireMinutes)),
  30. SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(symmetricKey), SecurityAlgorithms.HmacSha256Signature)
  31. };
  32. SecurityToken securityToken = tokenHandler.CreateToken(tokenDescriptor);
  33. var token = tokenHandler.WriteToken(securityToken);
  34. return token;
  35. }
  36. public string GetUserName(string token)
  37. {
  38. try
  39. {
  40. var tokenHandler = new JwtSecurityTokenHandler();
  41. var jwtToken = tokenHandler.ReadToken(token) as JwtSecurityToken;
  42. if (jwtToken == null)
  43. return null;
  44. var symmetricKey = Convert.FromBase64String(Secret);
  45. var validationParameters = new TokenValidationParameters()
  46. {
  47. ValidateIssuer = false,
  48. ValidateAudience = false,
  49. ValidateLifetime = false,
  50. RequireExpirationTime = false,
  51. IssuerSigningKey = new SymmetricSecurityKey(symmetricKey)
  52. };
  53. SecurityToken validatedToken = new JwtSecurityToken();
  54. var principal = tokenHandler.ValidateToken(token, validationParameters, out validatedToken);
  55. return principal.Identity.Name;
  56. }
  57. catch (Exception)
  58. {
  59. return null;
  60. }
  61. }
  62. public ClaimsPrincipal GetPrincipal(string token)
  63. {
  64. try
  65. {
  66. var tokenHandler = new JwtSecurityTokenHandler();
  67. var jwtToken = tokenHandler.ReadToken(token) as JwtSecurityToken;
  68. if (jwtToken == null)
  69. return null;
  70. var symmetricKey = Convert.FromBase64String(Secret);
  71. var validationParameters = new TokenValidationParameters()
  72. {
  73. RequireExpirationTime = true,
  74. ValidateIssuer = false,
  75. ValidateLifetime = true,
  76. ValidateAudience = false,
  77. IssuerSigningKey = new SymmetricSecurityKey(symmetricKey)
  78. };
  79. SecurityToken validatedToken = new JwtSecurityToken();
  80. var principal = tokenHandler.ValidateToken(token, validationParameters, out validatedToken);
  81. return principal;
  82. }
  83. catch (Exception)
  84. {
  85. return null;
  86. }
  87. }
  88. }
  89. }