From 6d98d845766fc064b65d648d926cfa1da5369a80 Mon Sep 17 00:00:00 2001 From: HombreLaser Date: Thu, 17 Nov 2022 21:36:57 -0600 Subject: AƱadido el service TokenGenerator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Program.cs | 5 +++++ Services/ITokenGenerator.cs | 8 ++++++++ Services/TokenGenerator.cs | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 Services/ITokenGenerator.cs create mode 100644 Services/TokenGenerator.cs diff --git a/Program.cs b/Program.cs index 22bf80e..0bcd2cb 100644 --- a/Program.cs +++ b/Program.cs @@ -7,6 +7,7 @@ using System.Text.Json.Serialization; using System.Text; using Microsoft.EntityFrameworkCore; using BackendPIA.Models; +using BackendPIA.Services; var builder = WebApplication.CreateBuilder(args); @@ -20,6 +21,10 @@ builder.Services.AddIdentity().AddEntityFrameworkStor // Automapper configuration. builder.Services.AddAutoMapper(typeof(Program)); +// Custom services configuration. +builder.Services.AddSingleton(s => new TokenGenerator(builder.Configuration["Jwt:Key"])); +// End of custom services configuration. + // Swagger configuration. builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { 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 { + 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 -- cgit v1.2.3