summaryrefslogtreecommitdiff
path: root/Services
diff options
context:
space:
mode:
Diffstat (limited to 'Services')
-rw-r--r--Services/ITokenGenerator.cs2
-rw-r--r--Services/TokenGenerator.cs21
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