Merge pull request #2301 from DuendeSoftware/jmdc/7.4.x/session-duplication-bug

Fixed an issue where claims where duplicated
This commit is contained in:
Joe DeCock 2025-12-09 11:42:04 -06:00 committed by GitHub
commit 5aa266c91a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 11 additions and 5 deletions

View file

@ -13,10 +13,6 @@ public class DefaultSessionClaimsFilter : ISessionClaimsFilter
{
var newClaimTypes = context.NewPrincipal.Claims.Select(x => x.Type).ToArray();
var currentClaimsToKeep = context.CurrentPrincipal.Claims.Where(x => !newClaimTypes.Contains(x.Type)).ToArray();
var id = context.NewPrincipal.Identities.First();
id.AddClaims(currentClaimsToKeep);
return Task.FromResult<IReadOnlyCollection<Claim>>(currentClaimsToKeep);
}
}

View file

@ -22,7 +22,8 @@ public class DefaultSessionClaimsFilterTests
new Claim(ClaimTypes.Name, "bob")
};
var currentPrincipal = new ClaimsPrincipal(new ClaimsIdentity(claims));
var newPrincipal = new ClaimsPrincipal(new ClaimsIdentity([new Claim("custom", "value"), new Claim(ClaimTypes.Name, "bob")]));
Claim[] newClaims = [new Claim("custom", "value"), new Claim(ClaimTypes.Name, "bob")];
var newPrincipal = new ClaimsPrincipal(new ClaimsIdentity(newClaims));
var filter = new DefaultSessionClaimsFilter();
var context = new SecurityStampRefreshingPrincipalContext() { NewPrincipal = newPrincipal, CurrentPrincipal = currentPrincipal };
@ -35,6 +36,9 @@ public class DefaultSessionClaimsFilterTests
resultTypes.ShouldContain(JwtClaimTypes.AuthenticationTime);
resultTypes.ShouldNotContain("custom");
resultTypes.ShouldNotContain(ClaimTypes.Name);
currentPrincipal.Claims.Count().ShouldBe(claims.Length);
newPrincipal.Claims.Count().ShouldBe(newClaims.Length);
}
[Fact]
@ -60,6 +64,8 @@ public class DefaultSessionClaimsFilterTests
JwtClaimTypes.AuthenticationTime
];
result.ShouldAllBe(c => expectClaimTypes.Contains(c.Type));
currentPrincipal.Claims.Count().ShouldBe(claims.Length);
newPrincipal.Claims.Count().ShouldBe(0);
}
[Fact]
@ -78,6 +84,8 @@ public class DefaultSessionClaimsFilterTests
var result = await filter.FilterToSessionClaimsAsync(context);
result.ShouldBeEmpty();
currentPrincipal.Claims.Count().ShouldBe(claims.Length);
newPrincipal.Claims.Count().ShouldBe(claims.Length);
}
[Fact]
@ -91,5 +99,7 @@ public class DefaultSessionClaimsFilterTests
var result = await filter.FilterToSessionClaimsAsync(context);
result.ShouldBeEmpty();
currentPrincipal.Claims.Count().ShouldBe(0);
newPrincipal.Claims.Count().ShouldBe(0);
}
}