diff options
author | HombreLaser <sebastian-440@live.com> | 2022-11-17 21:36:57 -0600 |
---|---|---|
committer | HombreLaser <sebastian-440@live.com> | 2022-11-17 21:36:57 -0600 |
commit | 6d98d845766fc064b65d648d926cfa1da5369a80 (patch) | |
tree | dd07305f4f1884b6037f7ccb7191fbeac55cffa3 | |
parent | ce78cf27954e8b96dea21e38dec9d6413be95628 (diff) |
Añadido el service TokenGenerator
-rw-r--r-- | Program.cs | 5 | ||||
-rw-r--r-- | Services/ITokenGenerator.cs | 8 | ||||
-rw-r--r-- | Services/TokenGenerator.cs | 39 |
3 files changed, 52 insertions, 0 deletions
@@ -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<UserAccount, IdentityRole>().AddEntityFrameworkStor // Automapper configuration. builder.Services.AddAutoMapper(typeof(Program)); +// Custom services configuration. +builder.Services.AddSingleton<ITokenGenerator>(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<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 |