Skip to content

Commit efe5bd8

Browse files
committed
Change configuration structure
Signed-off-by: Victor Chang <vicchang@nvidia.com>
1 parent 291fa19 commit efe5bd8

File tree

9 files changed

+42
-32
lines changed

9 files changed

+42
-32
lines changed

src/Authentication/Configurations/AuthenticationOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public bool BypassAuth(ILogger logger)
4444
{
4545
throw new InvalidOperationException("OpenId configuration is invalid.");
4646
}
47-
if (OpenId.Claims is null || OpenId.Claims.RequiredUserClaims!.IsNullOrEmpty() || OpenId.Claims.RequiredAdminClaims!.IsNullOrEmpty())
47+
if (OpenId.Claims is null || OpenId.Claims.UserClaims!.IsNullOrEmpty() || OpenId.Claims.AdminClaims!.IsNullOrEmpty())
4848
{
4949
throw new InvalidOperationException("No claims defined for OpenId.");
5050
}

src/Authentication/Configurations/Claims.cs renamed to src/Authentication/Configurations/ClaimMappings.cs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,24 @@
1818

1919
namespace Monai.Deploy.Security.Authentication.Configurations
2020
{
21-
public class Claims
21+
public class ClaimMappings
2222
{
23-
[ConfigurationKeyName("RequiredUserClaims")]
24-
public List<Claim>? RequiredUserClaims { get; set; }
23+
[ConfigurationKeyName("UserClaims")]
24+
public List<ClaimMapping>? UserClaims { get; set; }
2525

26-
[ConfigurationKeyName("RequiredAdminClaims")]
27-
public List<Claim>? RequiredAdminClaims { get; set; }
26+
[ConfigurationKeyName("AdminClaims")]
27+
public List<ClaimMapping>? AdminClaims { get; set; }
2828
}
2929

30-
public class Claim
30+
public class ClaimMapping
3131
{
32-
[ConfigurationKeyName("user_roles")]
33-
public string? UserRoles { get; set; }
32+
[ConfigurationKeyName("claim")]
33+
public string Claim { get; set; } = string.Empty;
34+
35+
[ConfigurationKeyName("role")]
36+
public string Role { get; set; } = string.Empty;
3437

3538
[ConfigurationKeyName("endpoints")]
36-
public List<string>? Endpoints { get; set; }
39+
public List<string>? Endpoints { get; set; } = default;
3740
}
3841
}

src/Authentication/Configurations/OpenIdOptions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public class OpenIdOptions
2929
[ConfigurationKeyName("ClientId")]
3030
public string? ClientId { get; set; }
3131

32-
[ConfigurationKeyName("Claims")]
33-
public Claims? Claims { get; set; }
32+
[ConfigurationKeyName("ClaimMappings")]
33+
public ClaimMappings? Claims { get; set; }
3434

3535
[ConfigurationKeyName("Audiences")]
3636
public IList<string>? Audiences { get; set; }

src/Authentication/Extensions/AuthKeys.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,5 @@ public static class AuthKeys
2525

2626
// Configuration Keys
2727
public const string OpenId = "OpenId";
28-
public const string UserRoles = "user_roles";
2928
}
3029
}

src/Authentication/Extensions/HttpContextExtension.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,22 @@ public static class HttpContextExtension
2727
/// <param name="httpcontext"></param>
2828
/// <param name="requiredClaims"></param>
2929
/// <returns></returns>
30-
public static List<string> GetValidEndpoints(this HttpContext httpcontext, List<Configurations.Claim> adminClaims, List<Configurations.Claim> userClaims)
30+
public static List<string> GetValidEndpoints(this HttpContext httpcontext, List<Configurations.ClaimMapping> adminClaims, List<Configurations.ClaimMapping> userClaims)
3131
{
3232
Guard.Against.Null(adminClaims);
3333
Guard.Against.Null(userClaims);
3434

3535
foreach (var claim in adminClaims!)
3636
{
37-
if (httpcontext.User.HasClaim(AuthKeys.UserRoles, claim.UserRoles!))
37+
if (httpcontext.User.HasClaim(claim.Claim, claim.Role))
3838
{
3939
return new List<string> { "all" };
4040
}
4141
}
4242

4343
foreach (var claim in userClaims!)
4444
{
45-
if (httpcontext.User.HasClaim(AuthKeys.UserRoles, claim.UserRoles!))
45+
if (httpcontext.User.HasClaim(claim.Claim, claim.Role))
4646
{
4747
return claim.Endpoints!;
4848
}

src/Authentication/Middleware/EndpointAuthorizationMiddleware.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public async Task InvokeAsync(HttpContext httpcontext)
5656
if (httpcontext.GetRouteValue("controller") is string controller)
5757
{
5858
_logger.UserAccessingController(httpcontext.User.Identity.Name, controller);
59-
var validEndpoints = httpcontext.GetValidEndpoints(_options.Value.OpenId!.Claims!.RequiredAdminClaims!, _options.Value.OpenId!.Claims!.RequiredUserClaims!);
59+
var validEndpoints = httpcontext.GetValidEndpoints(_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)

src/Authentication/Tests/MockJwtTokenHandler.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
using System.IdentityModel.Tokens.Jwt;
1818
using System.Text;
1919
using Microsoft.IdentityModel.Tokens;
20-
using Monai.Deploy.Security.Authentication.Extensions;
2120
using Claim = System.Security.Claims.Claim;
2221

2322
namespace Monai.Deploy.Security.Authentication.Tests
@@ -30,7 +29,7 @@ public static class MockJwtTokenHandler
3029
public static SecurityKey SecurityKey { get; }
3130
public static SigningCredentials SigningCredentials { get; }
3231

33-
private static readonly JwtSecurityTokenHandler TokenHandler = new JwtSecurityTokenHandler();
32+
private static readonly JwtSecurityTokenHandler TokenHandler = new();
3433

3534
static MockJwtTokenHandler()
3635
{
@@ -40,7 +39,7 @@ static MockJwtTokenHandler()
4039

4140
public static string GenerateJwtToken(string role)
4241
{
43-
var claims = new[] { new Claim(AuthKeys.UserRoles, role) };
42+
var claims = new[] { new Claim("user_roles", role) };
4443
return TokenHandler.WriteToken(new JwtSecurityToken(Issuer, "monai-app", claims, null, DateTime.UtcNow.AddMinutes(20), SigningCredentials));
4544
}
4645
}

src/Authentication/Tests/test.auth.json

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,24 @@
66
"ServerRealmKey": "l9ZRlbMQBt9k1klUUrlWFuke8WbqnEde",
77
"Audiences": [ "monai-app" ],
88
"ClientId": "monai-app-test",
9-
"Claims": {
10-
"RequiredUserClaims": [
9+
"ClaimMappings": {
10+
"UserClaims": [
1111
{
12-
"user_roles": "role-with-test",
12+
"claim": "user_roles",
13+
"role": "role-with-test",
1314
"endpoints": [ "test" ]
1415
},
1516
{
16-
"user_roles": "role-without-test",
17+
"claim": "user_roles",
18+
"roles": "role-without-test",
1719
"endpoints": [ "no-test" ]
1820
}
1921
],
20-
"RequiredAdminClaims": [
21-
{ "user_roles": "monai-role-admin" }
22+
"AdminClaims": [
23+
{
24+
"claim": "user_roles",
25+
"role": "monai-role-admin"
26+
}
2227
]
2328
}
2429
}

src/Authentication/example.json

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,23 @@
66
"ServerRealmKey": "EncryptionKey",
77
"ClientId": "monai-app",
88
"Audiences": [ "monai-deploy" ],
9-
"Claims": {
10-
"RequiredUserClaims": [
9+
"ClaimMappings": {
10+
"UserClaims": [
1111
{
12-
"user_roles": "monai-deploy-users",
13-
"endpoints": [ "payloads", "workflows", "workflowinstances", "tasks" ]
12+
"claim": "user_roles",
13+
"role": "monai-deploy-user",
14+
"endpoints": [ "test" ]
1415
},
1516
{
1617
"user_roles": "pacs-admins",
1718
"endpoints": [ "config" ]
1819
}
1920
],
20-
"RequiredAdminClaims": [
21-
{ "user_roles": "monai-role-admin" }
21+
"AdminClaims": [
22+
{
23+
"claim": "user_roles",
24+
"role": "monai-role-admin"
25+
}
2226
]
2327
}
2428
}

0 commit comments

Comments
 (0)