Advertisement
willtanium

JWE Middle Ware

Jun 23rd, 2021
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.93 KB | None | 0 0
  1. using System.Linq;
  2. using System.Threading.Tasks;
  3. using authorization_service.security.identity;
  4. using Microsoft.AspNetCore.Http;
  5. using Microsoft.Extensions.Logging;
  6. using Microsoft.Extensions.Options;
  7. using Optional;
  8. using Optional.Unsafe;
  9.  
  10. namespace authorization_service.security.jwe
  11. {
  12.     public class JWEAuthorizationMiddleware
  13.     {
  14.         private readonly RequestDelegate _next;
  15.         private readonly ILogger<JWEAuthorizationMiddleware> logger;
  16.         private readonly SessionConfiguration _configuration;
  17.  
  18.         public JWEAuthorizationMiddleware(
  19.             RequestDelegate next,
  20.             IOptions<SessionConfiguration> configuration,
  21.             ILogger<JWEAuthorizationMiddleware> logger)
  22.         {
  23.             this._next = next;
  24.             this.logger = logger;
  25.             this._configuration = configuration.Value;
  26.         }
  27.  
  28.         public async Task Invoke(HttpContext context, ITokenHandler tokenHandler)
  29.         {
  30.             var token = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last();
  31.             Option<Claims> result = tokenHandler.Verify(token);
  32.            
  33.             if (result.HasValue) {
  34.                 logger.LogInformation("Parsed Claim");
  35.                 Claims claims = result.ValueOrFailure();
  36.                 if (IsValidClaim(claims))
  37.                 {
  38.                     context.Items["principal"] = claims;
  39.                     context.Items["User"] = claims;
  40.                     context.Items["token"] = token;
  41.                     logger.LogInformation("Packed Content into claim");
  42.                 }
  43.             }
  44.             await _next(context);
  45.         }
  46.  
  47.         private bool IsValidClaim(in Claims claims)
  48.         {
  49.             if (claims.Issuer.Equals(_configuration.Issuer) &&
  50.                 claims.Audience.Equals(_configuration.Audience)) {
  51.                 return true;
  52.             }
  53.             return false;
  54.         }
  55.     }
  56. }
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement