diff --git a/src/MaksIT.Core/MaksIT.Core.csproj b/src/MaksIT.Core/MaksIT.Core.csproj index 7618d49..a862a93 100644 --- a/src/MaksIT.Core/MaksIT.Core.csproj +++ b/src/MaksIT.Core/MaksIT.Core.csproj @@ -8,7 +8,7 @@ MaksIT.Core - 1.4.5 + 1.4.6 Maksym Sadovnychyy MAKS-IT MaksIT.Core diff --git a/src/MaksIT.Core/Security/JWT/CustomClaims.cs b/src/MaksIT.Core/Security/JWT/CustomClaims.cs new file mode 100644 index 0000000..73b37d8 --- /dev/null +++ b/src/MaksIT.Core/Security/JWT/CustomClaims.cs @@ -0,0 +1,12 @@ +using MaksIT.Core.Abstractions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MaksIT.Core.Security.JWT; +public class CustomClaims : Enumeration { + public static readonly CustomClaims AclEntry = new(1, "acl_entry"); + private CustomClaims(int id, string name) : base(id, name) { } +} diff --git a/src/MaksIT.Core/Security/JWT/JWTTokenClaims.cs b/src/MaksIT.Core/Security/JWT/JWTTokenClaims.cs index 46c0554..d50a89f 100644 --- a/src/MaksIT.Core/Security/JWT/JWTTokenClaims.cs +++ b/src/MaksIT.Core/Security/JWT/JWTTokenClaims.cs @@ -17,6 +17,8 @@ public class JWTTokenClaims { /// public List? Roles { get; set; } + public List? AclEntries { get; set; } + /// /// Gets or sets the date and time when the token was issued. /// diff --git a/src/MaksIT.Core/Security/JWT/JWTTokenGenerateRequest.cs b/src/MaksIT.Core/Security/JWT/JWTTokenGenerateRequest.cs index dc41a09..09fa48b 100644 --- a/src/MaksIT.Core/Security/JWT/JWTTokenGenerateRequest.cs +++ b/src/MaksIT.Core/Security/JWT/JWTTokenGenerateRequest.cs @@ -37,4 +37,7 @@ public class JWTTokenGenerateRequest { /// public List? Roles { get; set; } + + public List? AclEntries { get; set; } + } \ No newline at end of file diff --git a/src/MaksIT.Core/Security/JWT/JwtGenerator.cs b/src/MaksIT.Core/Security/JWT/JwtGenerator.cs index 380b8f4..13e1bab 100644 --- a/src/MaksIT.Core/Security/JWT/JwtGenerator.cs +++ b/src/MaksIT.Core/Security/JWT/JwtGenerator.cs @@ -8,8 +8,10 @@ using System.Text; namespace MaksIT.Core.Security.JWT; -public static class JwtGenerator { + + +public static class JwtGenerator { /// /// Attempts to generate a JWT token using the specified request parameters. /// @@ -49,6 +51,9 @@ public static class JwtGenerator { if (request.Roles !=null) claims.AddRange(request.Roles.Select(role => new Claim(ClaimTypes.Role, role))); + if (request.AclEntries != null) + claims.AddRange(request.AclEntries.Select(acl => new Claim(CustomClaims.AclEntry.Name, acl))); + var tokenDescriptor = new JwtSecurityToken( issuer: request.Issuer, audience: request.Audience, @@ -141,6 +146,7 @@ public static class JwtGenerator { var username = principal.Identity?.Name; var roles = principal.Claims.Where(c => c.Type == ClaimTypes.Role).Select(c => c.Value).ToList(); + var aclEntries = principal.Claims.Where(c => c.Type == CustomClaims.AclEntry.Name).Select(c => c.Value).ToList(); var issuedAtClaim = principal.Claims.FirstOrDefault(c => c.Type == JwtRegisteredClaimNames.Iat)?.Value; var expiresAtClaim = principal.Claims.FirstOrDefault(c => c.Type == JwtRegisteredClaimNames.Exp)?.Value; @@ -152,6 +158,7 @@ public static class JwtGenerator { UserId = userId, Username = username, Roles = roles, + AclEntries = aclEntries, IssuedAt = issuedAt, ExpiresAt = expiresAt };