diff options
Diffstat (limited to 'Services')
-rw-r--r-- | Services/ITokenGenerator.cs | 2 | ||||
-rw-r--r-- | Services/TokenGenerator.cs | 21 |
2 files changed, 23 insertions, 0 deletions
diff --git a/Services/ITokenGenerator.cs b/Services/ITokenGenerator.cs index 3738f81..32db2b6 100644 --- a/Services/ITokenGenerator.cs +++ b/Services/ITokenGenerator.cs @@ -1,8 +1,10 @@ +using System.Security.Claims; using BackendPIA.Models; namespace BackendPIA.Services { public interface ITokenGenerator { public string Generate(UserAccount user, string role); public string GenerateRefreshToken(); + public string? GetPrincipalFromToken(string token); } }
\ No newline at end of file diff --git a/Services/TokenGenerator.cs b/Services/TokenGenerator.cs index 514417d..f792cf9 100644 --- a/Services/TokenGenerator.cs +++ b/Services/TokenGenerator.cs @@ -36,5 +36,26 @@ namespace BackendPIA.Services { return Convert.ToBase64String(random_number); } + + public string? GetPrincipalFromToken(string token) { + var tokenValidationParameters = new TokenValidationParameters { + ValidateAudience = false, + ValidateIssuer = false, + ValidateIssuerSigningKey = true, + IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_key)), + ValidateLifetime = false + }; + var tokenHandler = new JwtSecurityTokenHandler(); + SecurityToken security_token; + var principal = tokenHandler.ValidateToken(token, tokenValidationParameters, out security_token); + var jwtSecurityToken = security_token as JwtSecurityToken; + + if (jwtSecurityToken == null || !jwtSecurityToken.Header.Alg.Equals(SecurityAlgorithms.HmacSha256, StringComparison.InvariantCultureIgnoreCase)) + return null; + + var jwt = tokenHandler.ReadJwtToken(token); + + return jwt.Claims.Where(c => c.Type == "email").First().Value; + } } }
\ No newline at end of file |