diff --git a/modules/openiddict/app/OpenIddict.Demo.Client.Console/Program.cs b/modules/openiddict/app/OpenIddict.Demo.Client.Console/Program.cs
index 90ce819094..501cf0b543 100644
--- a/modules/openiddict/app/OpenIddict.Demo.Client.Console/Program.cs
+++ b/modules/openiddict/app/OpenIddict.Demo.Client.Console/Program.cs
@@ -147,3 +147,16 @@ Console.WriteLine("Access token: {0}", tokenResponse.AccessToken);
Console.WriteLine();
Console.WriteLine("Refresh token: {0}", tokenResponse.RefreshToken);
Console.WriteLine();
+
+serverRequest = new HttpRequestMessage(HttpMethod.Get, api);
+serverRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", tokenResponse.AccessToken);
+
+serverResponse = await client.SendAsync(serverRequest);
+serverResponse.EnsureSuccessStatusCode();
+
+Console.WriteLine("ClientCredentials API response: {0}", JsonSerializer.Serialize(JsonDocument.Parse(await serverResponse.Content.ReadAsStringAsync()), new JsonSerializerOptions
+{
+ WriteIndented = true
+}));
+
+Console.WriteLine();
diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs
index 58a2391456..8e103f92fa 100644
--- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs
+++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs
@@ -127,6 +127,8 @@ public class AbpOpenIddictAspNetCoreModule : AbpModule
builder.AddEventHandler(AbpValidatePostLogoutRedirectUriParameter.Descriptor);
}
+ builder.AddEventHandler(RemoveClaimsFromClientCredentialsGrantType.Descriptor);
+
services.ExecutePreConfiguredActions(builder);
});
diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Controllers/TokenController.ClientCredentials.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Controllers/TokenController.ClientCredentials.cs
index 8e0b9b6576..4a853b2d9c 100644
--- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Controllers/TokenController.ClientCredentials.cs
+++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Controllers/TokenController.ClientCredentials.cs
@@ -28,6 +28,12 @@ public partial class TokenController
TokenValidationParameters.DefaultAuthenticationType,
OpenIddictConstants.Claims.PreferredUsername, OpenIddictConstants.Claims.Role);
+ // The Subject and PreferredUsername will be removed by .
+
+ // Use the client_id as the subject identifier.
+ identity.AddClaim(OpenIddictConstants.Claims.Subject, await ApplicationManager.GetClientIdAsync(application),
+ OpenIddictConstants.Destinations.AccessToken, OpenIddictConstants.Destinations.IdentityToken);
+
identity.AddClaim(OpenIddictConstants.Claims.PreferredUsername, await ApplicationManager.GetDisplayNameAsync(application),
OpenIddictConstants.Destinations.AccessToken, OpenIddictConstants.Destinations.IdentityToken);
diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/RemoveClaimsFromClientCredentialsGrantType.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/RemoveClaimsFromClientCredentialsGrantType.cs
new file mode 100644
index 0000000000..8ac866283b
--- /dev/null
+++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/RemoveClaimsFromClientCredentialsGrantType.cs
@@ -0,0 +1,30 @@
+using System.Threading.Tasks;
+using OpenIddict.Abstractions;
+using OpenIddict.Server;
+
+namespace Volo.Abp.OpenIddict;
+
+public class RemoveClaimsFromClientCredentialsGrantType : IOpenIddictServerHandler
+{
+ public static OpenIddictServerHandlerDescriptor Descriptor { get; }
+ = OpenIddictServerHandlerDescriptor.CreateBuilder()
+ .AddFilter()
+ .UseSingletonHandler()
+ .SetOrder(OpenIddictServerHandlers.PrepareAccessTokenPrincipal.Descriptor.Order - 1)
+ .SetType(OpenIddictServerHandlerType.Custom)
+ .Build();
+
+ public ValueTask HandleAsync(OpenIddictServerEvents.ProcessSignInContext context)
+ {
+ if (context.Request.IsClientCredentialsGrantType())
+ {
+ if (context.Principal != null)
+ {
+ context.Principal.RemoveClaims(OpenIddictConstants.Claims.Subject);
+ context.Principal.RemoveClaims(OpenIddictConstants.Claims.PreferredUsername);
+ }
+ }
+
+ return default;
+ }
+}