Merge pull request #9341 from abpframework/maliming/SecurityStampValidatorCallback

Add SecurityStampValidatorCallback to Identity module.
pull/9353/head
İsmail ÇAĞDAŞ 4 years ago committed by GitHub
commit 46cdb5126b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,33 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
namespace Volo.Abp.Identity.AspNetCore
{
public class AbpSecurityStampValidatorCallback
{
/// <summary>
/// Implements callback for SecurityStampValidator's OnRefreshingPrincipal event.
/// https://github.com/IdentityServer/IdentityServer4/blob/main/src/AspNetIdentity/src/SecurityStampValidatorCallback.cs
/// </summary>
public class SecurityStampValidatorCallback
{
/// <summary>
/// Maintains the claims captured at login time that are not being created by ASP.NET Identity.
/// This is needed to preserve claims such as idp, auth_time, amr.
/// </summary>
/// <param name="context">The context.</param>
/// <returns></returns>
public static Task UpdatePrincipal(SecurityStampRefreshingPrincipalContext context)
{
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.CompletedTask;
}
}
}
}
Loading…
Cancel
Save