summaryrefslogtreecommitdiff
path: root/Services
diff options
context:
space:
mode:
authorHombreLaser <sebastian-440@live.com>2022-11-17 21:36:57 -0600
committerHombreLaser <sebastian-440@live.com>2022-11-17 21:36:57 -0600
commit6d98d845766fc064b65d648d926cfa1da5369a80 (patch)
treedd07305f4f1884b6037f7ccb7191fbeac55cffa3 /Services
parentce78cf27954e8b96dea21e38dec9d6413be95628 (diff)
Añadido el service TokenGenerator
Diffstat (limited to 'Services')
-rw-r--r--Services/ITokenGenerator.cs8
-rw-r--r--Services/TokenGenerator.cs39
2 files changed, 47 insertions, 0 deletions
diff --git a/Services/ITokenGenerator.cs b/Services/ITokenGenerator.cs
new file mode 100644
index 0000000..3738f81
--- /dev/null
+++ b/Services/ITokenGenerator.cs
@@ -0,0 +1,8 @@
+using BackendPIA.Models;
+
+namespace BackendPIA.Services {
+ public interface ITokenGenerator {
+ public string Generate(UserAccount user, string role);
+ public string GenerateRefreshToken();
+ }
+} \ No newline at end of file
diff --git a/Services/TokenGenerator.cs b/Services/TokenGenerator.cs
new file mode 100644
index 0000000..7d9d1ec
--- /dev/null
+++ b/Services/TokenGenerator.cs
@@ -0,0 +1,39 @@
+using Microsoft.IdentityModel.Tokens;
+using System.IdentityModel.Tokens.Jwt;
+using Microsoft.AspNetCore.Identity;
+using System.Text;
+using System.Security.Claims;
+using System.Security.Cryptography;
+using BackendPIA.Models;
+
+namespace BackendPIA.Services {
+ public class TokenGenerator : ITokenGenerator {
+ private readonly string _key;
+ public TokenGenerator(string key) {
+ _key = key;
+ }
+
+ public string Generate(UserAccount user, string role) {
+ var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_key));
+ var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
+ var expiration = DateTime.UtcNow.AddMinutes(30);
+ //var issuer = _configuration["Jwt:Issuer"];
+ var claims = new List<Claim> {
+ new Claim("sid", user.Id),
+ new Claim("username", user.UserName),
+ new Claim("email", user.Email),
+ new Claim("role", role)
+ };
+ var descriptor = new JwtSecurityToken(issuer: null, audience: null, claims: claims, expires: expiration, signingCredentials: creds);
+
+ return new JwtSecurityTokenHandler().WriteToken(descriptor);
+ }
+
+ public string GenerateRefreshToken() {
+ byte[] random_number = new byte[16];
+ RandomNumberGenerator rng = RandomNumberGenerator.Create();
+ rng.GetBytes(random_number);
+ return string.Join("", random_number);
+ }
+ }
+} \ No newline at end of file