source: ChapterX.Infrastructure/Services/JwtTokenService.cs@ 0b502c2

main
Last change on this file since 0b502c2 was b373fea, checked in by kikisrbinoska <srbinoskakristina07@…>, 13 days ago

Fixes for authentication and auhtorization\

  • Property mode set to 100644
File size: 1.7 KB
Line 
1using ChapterX.Application.Auth;
2using ChapterX.Domain.Entities;
3using Microsoft.Extensions.Configuration;
4using Microsoft.IdentityModel.Tokens;
5using System.IdentityModel.Tokens.Jwt;
6using System.Security.Claims;
7using System.Text;
8
9namespace ChapterX.Infrastructure.Services
10{
11 public class JwtTokenService : IJwtTokenService
12 {
13 private readonly IConfiguration _configuration;
14
15 public JwtTokenService(IConfiguration configuration)
16 {
17 _configuration = configuration;
18 }
19
20 public string GenerateToken(User user)
21 {
22 var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]!));
23 var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
24
25 var role = user.Admin != null ? "Admin"
26 : user.Writer != null ? "Writer"
27 : "RegularUser";
28
29 var claims = new[]
30 {
31 new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
32 new Claim(JwtRegisteredClaimNames.Email, user.Email),
33 new Claim(JwtRegisteredClaimNames.UniqueName, user.Username),
34 new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
35 new Claim(ClaimTypes.Role, role)
36 };
37
38 var token = new JwtSecurityToken(
39 issuer: _configuration["Jwt:Issuer"],
40 audience: _configuration["Jwt:Audience"],
41 claims: claims,
42 expires: DateTime.UtcNow.AddDays(7),
43 signingCredentials: credentials
44 );
45
46 return new JwtSecurityTokenHandler().WriteToken(token);
47 }
48 }
49}
Note: See TracBrowser for help on using the repository browser.