mirror of
https://github.com/DuendeSoftware/products
synced 2026-05-24 09:28:24 +00:00
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:
commit
5aa266c91a
2 changed files with 11 additions and 5 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue