From ffc94a29e5a76531c6f0b9190f9b09d4965e92f1 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 8 May 2024 15:56:42 +0800 Subject: [PATCH] Always `CheckDynamicClaims` on `OnConnectedAsync` and `OnDisconnectedAsync` method. --- .../AbpAuthenticationHubFilter.cs | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.SignalR/Volo/Abp/AspNetCore/SignalR/Authentication/AbpAuthenticationHubFilter.cs b/framework/src/Volo.Abp.AspNetCore.SignalR/Volo/Abp/AspNetCore/SignalR/Authentication/AbpAuthenticationHubFilter.cs index 03fe720310..7f77992ce3 100644 --- a/framework/src/Volo.Abp.AspNetCore.SignalR/Volo/Abp/AspNetCore/SignalR/Authentication/AbpAuthenticationHubFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.SignalR/Volo/Abp/AspNetCore/SignalR/Authentication/AbpAuthenticationHubFilter.cs @@ -16,7 +16,7 @@ public class AbpAuthenticationHubFilter : IHubFilter { var currentPrincipalAccessor = invocationContext.ServiceProvider.GetRequiredService(); var claimsPrincipal = invocationContext.Context.User; - await HandleDynamicClaimsPrincipalAsync(claimsPrincipal, invocationContext.ServiceProvider, invocationContext.Context); + await HandleDynamicClaimsPrincipalAsync(claimsPrincipal, invocationContext.ServiceProvider, invocationContext.Context, false); using (currentPrincipalAccessor.Change(claimsPrincipal!)) { return await next(invocationContext); @@ -27,7 +27,7 @@ public class AbpAuthenticationHubFilter : IHubFilter { var currentPrincipalAccessor = context.ServiceProvider.GetRequiredService(); var claimsPrincipal = context.Context.User; - await HandleDynamicClaimsPrincipalAsync(claimsPrincipal, context.ServiceProvider, context.Context); + await HandleDynamicClaimsPrincipalAsync(claimsPrincipal, context.ServiceProvider, context.Context, true); using (currentPrincipalAccessor.Change(claimsPrincipal!)) { await next(context); @@ -38,21 +38,23 @@ public class AbpAuthenticationHubFilter : IHubFilter { var currentPrincipalAccessor = context.ServiceProvider.GetRequiredService(); var claimsPrincipal = context.Context.User; - await HandleDynamicClaimsPrincipalAsync(claimsPrincipal, context.ServiceProvider, context.Context); + await HandleDynamicClaimsPrincipalAsync(claimsPrincipal, context.ServiceProvider, context.Context, true); using (currentPrincipalAccessor.Change(claimsPrincipal!)) { await next(context, exception); } } - protected virtual async Task HandleDynamicClaimsPrincipalAsync(ClaimsPrincipal? claimsPrincipal, IServiceProvider serviceProvider, HubCallerContext hubCallerContext) + protected virtual async Task HandleDynamicClaimsPrincipalAsync(ClaimsPrincipal? claimsPrincipal, IServiceProvider serviceProvider, HubCallerContext hubCallerContext, bool skipCheckDynamicClaimsInterval) { if (claimsPrincipal?.Identity != null && claimsPrincipal.Identity.IsAuthenticated && - serviceProvider.GetRequiredService>().Value.IsDynamicClaimsEnabled) + serviceProvider.GetRequiredService>().Value + .IsDynamicClaimsEnabled) { var checkDynamicClaimsInterval = serviceProvider.GetRequiredService>().Value.CheckDynamicClaimsInterval; - if (checkDynamicClaimsInterval.HasValue && + if (!skipCheckDynamicClaimsInterval && + checkDynamicClaimsInterval.HasValue && hubCallerContext.Items.TryGetValue(nameof(HandleDynamicClaimsPrincipalAsync), out var lastCheckDynamicClaimsTime) && lastCheckDynamicClaimsTime is DateTime lastCheckDynamicClaimsTimeValue) { @@ -66,10 +68,13 @@ public class AbpAuthenticationHubFilter : IHubFilter hubCallerContext.Items[nameof(HandleDynamicClaimsPrincipalAsync)] = DateTime.UtcNow; claimsPrincipal = claimsPrincipal.Identity is ClaimsIdentity identity - ? new ClaimsPrincipal(new ClaimsIdentity(claimsPrincipal.Claims, claimsPrincipal.Identity.AuthenticationType, identity.NameClaimType, identity.RoleClaimType)) - : new ClaimsPrincipal(new ClaimsIdentity(claimsPrincipal.Claims, claimsPrincipal.Identity.AuthenticationType)); + ? new ClaimsPrincipal(new ClaimsIdentity(claimsPrincipal.Claims, + claimsPrincipal.Identity.AuthenticationType, identity.NameClaimType, identity.RoleClaimType)) + : new ClaimsPrincipal(new ClaimsIdentity(claimsPrincipal.Claims, + claimsPrincipal.Identity.AuthenticationType)); - claimsPrincipal = await serviceProvider.GetRequiredService().CreateDynamicAsync(claimsPrincipal); + claimsPrincipal = await serviceProvider.GetRequiredService() + .CreateDynamicAsync(claimsPrincipal); if (claimsPrincipal.Identity?.IsAuthenticated == false) { hubCallerContext.Abort();