Skip to content

Commit 32e203b

Browse files
committed
Log user claims
Signed-off-by: Victor Chang <vicchang@nvidia.com>
1 parent 5da6125 commit 32e203b

File tree

4 files changed

+24
-16
lines changed

4 files changed

+24
-16
lines changed

src/Authentication/Extensions/HttpContextExtension.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
using Ardalis.GuardClauses;
1818
using Microsoft.AspNetCore.Http;
19+
using Microsoft.Extensions.Logging;
20+
using Monai.Deploy.Security.Authentication.Middleware;
21+
using Monai.Deploy.WorkflowManager.Logging;
1922

2023
namespace Monai.Deploy.Security.Authentication.Extensions
2124
{
@@ -27,7 +30,7 @@ public static class HttpContextExtension
2730
/// <param name="httpcontext"></param>
2831
/// <param name="requiredClaims"></param>
2932
/// <returns></returns>
30-
public static List<string> GetValidEndpoints(this HttpContext httpcontext, List<Configurations.ClaimMapping> adminClaims, List<Configurations.ClaimMapping> userClaims)
33+
public static List<string> GetValidEndpoints(this HttpContext httpcontext, ILogger<EndpointAuthorizationMiddleware> logger, List<Configurations.ClaimMapping> adminClaims, List<Configurations.ClaimMapping> userClaims)
3134
{
3235
Guard.Against.Null(adminClaims);
3336
Guard.Against.Null(userClaims);
@@ -36,6 +39,7 @@ public static List<string> GetValidEndpoints(this HttpContext httpcontext, List<
3639
{
3740
if (httpcontext.User.HasClaim(claim.Claim, claim.Role))
3841
{
42+
logger.UserClaimFound(claim.Claim, claim.Role);
3943
return new List<string> { "all" };
4044
}
4145
}
@@ -44,6 +48,7 @@ public static List<string> GetValidEndpoints(this HttpContext httpcontext, List<
4448
{
4549
if (httpcontext.User.HasClaim(claim.Claim, claim.Role))
4650
{
51+
logger.UserClaimFound(claim.Claim, claim.Role);
4752
return claim.Endpoints!;
4853
}
4954
}

src/Authentication/Logging.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ public static partial class Log
2626
[LoggerMessage(EventId = 500001, Level = LogLevel.Debug, Message = "User '{user}' attempting to access controller '{controller}'.")]
2727
public static partial void UserAccessingController(this ILogger logger, string? user, string controller);
2828

29-
[LoggerMessage(EventId = 500002, Level = LogLevel.Debug, Message = "User '{user}' access denied due to allowed permissions: '{permissions}'.")]
29+
[LoggerMessage(EventId = 500002, Level = LogLevel.Debug, Message = "User '{user}' access denied due to limited permissions: '{permissions}'.")]
3030
public static partial void UserAccessDenied(this ILogger logger, string? user, string? permissions);
31+
32+
[LoggerMessage(EventId = 500003, Level = LogLevel.Debug, Message = "User claim {claim}={value}.")]
33+
public static partial void UserClaimFound(this ILogger logger, string? claim, string? value);
3134
}
3235
}

src/Authentication/Middleware/EndpointAuthorizationMiddleware.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,39 +41,39 @@ public EndpointAuthorizationMiddleware(RequestDelegate next, IOptions<Authentica
4141
_logger = logger;
4242
}
4343

44-
public async Task InvokeAsync(HttpContext httpcontext)
44+
public async Task InvokeAsync(HttpContext httpContext)
4545
{
4646
if (_options.Value.BypassAuth(_logger))
4747
{
48-
await _next(httpcontext).ConfigureAwait(false);
48+
await _next(httpContext).ConfigureAwait(false);
4949
return;
5050
}
5151

52-
if (httpcontext.User is not null
53-
&& httpcontext.User.Identity is not null
54-
&& httpcontext.User.Identity.IsAuthenticated)
52+
if (httpContext.User is not null
53+
&& httpContext.User.Identity is not null
54+
&& httpContext.User.Identity.IsAuthenticated)
5555
{
56-
if (httpcontext.GetRouteValue("controller") is string controller)
56+
if (httpContext.GetRouteValue("controller") is string controller)
5757
{
58-
_logger.UserAccessingController(httpcontext.User.Identity.Name, controller);
59-
var validEndpoints = httpcontext.GetValidEndpoints(_options.Value.OpenId!.Claims!.AdminClaims!, _options.Value.OpenId!.Claims!.UserClaims!);
58+
_logger.UserAccessingController(httpContext.User.Identity.Name, controller);
59+
var validEndpoints = httpContext.GetValidEndpoints(_logger, _options.Value.OpenId!.Claims!.AdminClaims!, _options.Value.OpenId!.Claims!.UserClaims!);
6060
var result = validEndpoints.Any(e => e.Equals(controller, StringComparison.InvariantCultureIgnoreCase)) || validEndpoints.Contains("all");
6161

6262
if (result is false)
6363
{
64-
_logger.UserAccessDenied(httpcontext.User.Identity.Name, string.Join(',', validEndpoints));
65-
httpcontext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
64+
_logger.UserAccessDenied(httpContext.User.Identity.Name, string.Join(',', validEndpoints));
65+
httpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
6666

67-
await httpcontext.Response.CompleteAsync().ConfigureAwait(false);
67+
await httpContext.Response.CompleteAsync().ConfigureAwait(false);
6868

6969
return;
7070
}
7171
}
72-
await _next(httpcontext).ConfigureAwait(false);
72+
await _next(httpContext).ConfigureAwait(false);
7373
}
7474
else
7575
{
76-
httpcontext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
76+
httpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
7777
}
7878
}
7979
}

src/Authentication/example.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@
2727
}
2828
}
2929
}
30-
}
30+
}

0 commit comments

Comments
 (0)