mirror of
https://github.com/DuendeSoftware/products
synced 2026-05-24 01:18:22 +00:00
Thread CT through SecurityStampValidatorCallback.UpdatePrincipal via IHttpContextAccessor
This commit is contained in:
parent
2a2fe41b54
commit
90cf6592af
2 changed files with 7 additions and 4 deletions
|
|
@ -1,12 +1,14 @@
|
|||
// Copyright (c) Duende Software. All rights reserved.
|
||||
// See LICENSE in the project root for license information.
|
||||
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace Duende.IdentityServer.AspNetIdentity;
|
||||
|
||||
public class ConfigureSecurityStampValidatorOptions(ISessionClaimsFilter sessionClaimsFilter) : IConfigureOptions<SecurityStampValidatorOptions>
|
||||
public class ConfigureSecurityStampValidatorOptions(ISessionClaimsFilter sessionClaimsFilter, IHttpContextAccessor httpContextAccessor) : IConfigureOptions<SecurityStampValidatorOptions>
|
||||
{
|
||||
public void Configure(SecurityStampValidatorOptions options) => options.OnRefreshingPrincipal = async context => await SecurityStampValidatorCallback.UpdatePrincipal(context, sessionClaimsFilter);
|
||||
public void Configure(SecurityStampValidatorOptions options) => options.OnRefreshingPrincipal = async context =>
|
||||
await SecurityStampValidatorCallback.UpdatePrincipal(context, sessionClaimsFilter, httpContextAccessor.HttpContext?.RequestAborted ?? default);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,15 +18,16 @@ public static class SecurityStampValidatorCallback
|
|||
/// <param name="sessionClaimsFilter">Instance of session claims filter used to filter the claims from the ClaimsPrincipal to
|
||||
/// those that are session claims which are not persisted by ASP.NET Identity and would otherwise bee lost when the principal
|
||||
/// is updated.</param>
|
||||
/// <param name="ct">The cancellation token.</param>
|
||||
/// <returns></returns>
|
||||
public static async Task UpdatePrincipal(SecurityStampRefreshingPrincipalContext context, ISessionClaimsFilter sessionClaimsFilter)
|
||||
public static async Task UpdatePrincipal(SecurityStampRefreshingPrincipalContext context, ISessionClaimsFilter sessionClaimsFilter, Ct ct)
|
||||
{
|
||||
if (context.NewPrincipal == null || !context.NewPrincipal.Identities.Any())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var currentClaimsToKeep = await sessionClaimsFilter.FilterToSessionClaimsAsync(context, default);
|
||||
var currentClaimsToKeep = await sessionClaimsFilter.FilterToSessionClaimsAsync(context, ct);
|
||||
|
||||
var id = context.NewPrincipal.Identities.First();
|
||||
id.AddClaims(currentClaimsToKeep);
|
||||
|
|
|
|||
Loading…
Reference in a new issue