Skip to content

Commit 500168f

Browse files
authored
fix bug #52 Merge pull request #53 from WorldMaker/master
Add a ContainsKey check for Roles claim
2 parents 0f84f78 + af22727 commit 500168f

2 files changed

Lines changed: 24 additions & 4 deletions

File tree

src/KK.AspNetCore.EasyAuthAuthentication/Services/EasyAuthForAuthorizationTokenService.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,15 @@ public bool CanHandleAuthentification(HttpContext httpContext) =>
7070

7171
private IEnumerable<AADClaimsModel> BuildFromAuthToken(JObject xMsClientPrincipal, ProviderOptions options)
7272
{
73-
this.logger.LogDebug($"payload was {xMsClientPrincipal[this.defaultOptions.RoleClaimType].ToString()}");
73+
var claims = new List<AADClaimsModel>();
7474

75-
var claims = JsonConvert.DeserializeObject<IEnumerable<string>>(xMsClientPrincipal[this.defaultOptions.RoleClaimType].ToString())
76-
.Select(r => new AADClaimsModel { Typ = this.defaultOptions.RoleClaimType, Values = r })
77-
.ToList();
75+
if (xMsClientPrincipal.ContainsKey(this.defaultOptions.RoleClaimType))
76+
{
77+
this.logger.LogDebug($"payload was {xMsClientPrincipal[this.defaultOptions.RoleClaimType]}");
78+
79+
claims.AddRange(JsonConvert.DeserializeObject<IEnumerable<string>>(xMsClientPrincipal[this.defaultOptions.RoleClaimType].ToString())
80+
.Select(r => new AADClaimsModel { Typ = this.defaultOptions.RoleClaimType, Values = r }));
81+
}
7882
var otherClaims = xMsClientPrincipal.Properties()
7983
.Where(claimToken => claimToken.Name != this.defaultOptions.RoleClaimType)
8084
.Select(claimToken => new AADClaimsModel { Typ = claimToken.Name, Values = claimToken.Value.ToString() })

test/KK.AspNetCore.EasyAuthAuthentication.Test/Services/EasyAuthForAuthorizationTokenServiceTest.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,5 +96,21 @@ public void IfAValidJwtTokenWithoutIdpAndIssPropertyIsInTheHeaderItsThrowsAnErro
9696
// Act && Arrange
9797
Assert.Throws<ArgumentException>(() => handler.AuthUser(httpcontext));
9898
}
99+
100+
[Fact]
101+
public void IfAValidJwtTokenWithoutTheClaimPropertyIsInTheHeaderItsNotThrowAnError()
102+
{
103+
// Arrange
104+
var handler = new EasyAuthForAuthorizationTokenService(this.loggerFactory.CreateLogger<EasyAuthForAuthorizationTokenService>());
105+
var httpcontext = new DefaultHttpContext();
106+
var jwtWithoutIdpProperty = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiIwN2Q2ZDE1YS1jZTg5LTQ4MmMtOTcxYi01NDMxYjc1MTkxNjciLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9lOTgxZGNhZi05MTk3LTQ3N2YtYmQwNi0wZTU3MmIwYjMzNDcvIiwiaWF0IjoxNTYyNjk4ODc2LCJuYmYiOjE1NjI2OTg4NzYsImV4cCI6MTU2MjcwMjc3NiwiYWlvIjoiNDJaZ1lPQmZzRzd0ZEg1ZVBpSHZvNU9QdDdyT0J3QT0iLCJhcHBpZCI6ImQzMTViZmFmLTYzMDQtNGY5Zi04MjFjLTU0NmJkYzAwYjViMCIsImFwcGlkYWNyIjoiMSIsIm9pZCI6ImY1ZjlmYTg2LTQ0MTQtNDRjNy04MGY4LWY3ODBhZTBhYmYyMSIsInN1YiI6ImY1ZjlmYTg2LTQ0MTQtNDRjNy04MGY4LWY3ODBhZTBhYmYyMSIsInRpZCI6ImU5ODFkY2FmLTkxOTctNDc3Zi1iZDA2LTBlNTcyYjBiMzM0NyIsInV0aSI6ImhDSnUzb2g3d1VlWmFpNVFKT1lBQUEiLCJ2ZXIiOiIxLjAifQ.HFVt3Moojs3G7J5CoqfJ8lDtxUf3SsO1bGb8_9O-314";
107+
httpcontext.Request.Headers.Add("Authorization", jwtWithoutIdpProperty);
108+
109+
// Act
110+
var result = handler.AuthUser(httpcontext);
111+
// Arrange
112+
Assert.True(result.Succeeded);
113+
Assert.Equal(this.testJwtAppId, result.Principal.Identity.Name);
114+
}
99115
}
100116
}

0 commit comments

Comments
 (0)