diff --git a/Directory.Packages.props b/Directory.Packages.props
index e2ea3dc099..85618fcd8c 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -161,6 +161,7 @@
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj
index d9e5081421..614148ec52 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj
@@ -27,6 +27,7 @@
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyAuthenticationStateProvider.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyAuthenticationStateProvider.cs
index 6a27b03ea7..0018571c20 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyAuthenticationStateProvider.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyAuthenticationStateProvider.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Concurrent;
+using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Net.Http;
using System.Security.Claims;
@@ -13,6 +14,7 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using Microsoft.JSInterop;
+using Volo.Abp.Security.Claims;
namespace Volo.Abp.AspNetCore.Components.WebAssembly;
@@ -138,6 +140,17 @@ public class WebAssemblyAuthenticationStateProvider x.Type == AbpClaimTypes.SessionId);
+ var sessionId = handler.ReadJwtToken(accessToken)?.Claims?.FirstOrDefault(x => x.Type == AbpClaimTypes.SessionId);
+ if (sessionId?.Value == currentSessionId?.Value)
+ {
+ continue;
+ }
+ }
+
var httpClient = HttpClientFactory.CreateClient(nameof(WebAssemblyAuthenticationStateProvider));
var result = await httpClient.RevokeTokenAsync(new TokenRevocationRequest
{
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentitySessionRepository.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentitySessionRepository.cs
index d40fbbcc95..9e3ed955bc 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentitySessionRepository.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentitySessionRepository.cs
@@ -12,6 +12,10 @@ public interface IIdentitySessionRepository : IBasicRepository GetAsync(string sessionId, CancellationToken cancellationToken = default);
+ Task ExistAsync(Guid id, CancellationToken cancellationToken = default);
+
+ Task ExistAsync(string sessionId, CancellationToken cancellationToken = default);
+
Task> GetListAsync(
string sorting = null,
int maxResultCount = int.MaxValue,
diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentitySessionRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentitySessionRepository.cs
index 222ecf5886..dc11edbcfe 100644
--- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentitySessionRepository.cs
+++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentitySessionRepository.cs
@@ -36,6 +36,16 @@ public class EfCoreIdentitySessionRepository : EfCoreRepository ExistAsync(Guid id, CancellationToken cancellationToken = default)
+ {
+ return await (await GetDbSetAsync()).AnyAsync(x => x.Id == id, GetCancellationToken(cancellationToken));
+ }
+
+ public virtual async Task ExistAsync(string sessionId, CancellationToken cancellationToken = default)
+ {
+ return await (await GetDbSetAsync()).AnyAsync(x => x.SessionId == sessionId, GetCancellationToken(cancellationToken));
+ }
+
public virtual async Task> GetListAsync(
string sorting = null,
int maxResultCount = int.MaxValue,
diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentitySessionRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentitySessionRepository.cs
index 957699d4d7..a1a8f94c49 100644
--- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentitySessionRepository.cs
+++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentitySessionRepository.cs
@@ -39,6 +39,20 @@ public class MongoIdentitySessionRepository : MongoDbRepository ExistAsync(Guid id, CancellationToken cancellationToken = default)
+ {
+ return await (await GetMongoQueryableAsync(GetCancellationToken(cancellationToken)))
+ .As>()
+ .AnyAsync(x => x.Id == id, GetCancellationToken(cancellationToken));
+ }
+
+ public virtual async Task ExistAsync(string sessionId, CancellationToken cancellationToken = default)
+ {
+ return await (await GetMongoQueryableAsync(GetCancellationToken(cancellationToken)))
+ .As>()
+ .AnyAsync(x => x.SessionId == sessionId, GetCancellationToken(cancellationToken));
+ }
+
public virtual async Task> GetListAsync(
string sorting = null,
int maxResultCount = int.MaxValue,