diff --git a/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreBuilder.cs b/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreBuilder.cs
index e4ff55f8..d0d2bd6a 100644
--- a/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreBuilder.cs
+++ b/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreBuilder.cs
@@ -146,6 +146,13 @@ public sealed class OpenIddictServerAspNetCoreBuilder
public OpenIddictServerAspNetCoreBuilder EnableStatusCodePagesIntegration()
=> Configure(options => options.EnableStatusCodePagesIntegration = true);
+ ///
+ /// Suppresses indentation for the JSON responses returned by the ASP.NET Core host.
+ ///
+ /// The instance.
+ public OpenIddictServerAspNetCoreBuilder SuppressJsonResponseIndentation()
+ => Configure(options => options.SuppressJsonResponseIndentation = true);
+
///
/// Sets the realm returned to the caller as part of the WWW-Authenticate header.
///
diff --git a/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreHandlers.cs b/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreHandlers.cs
index 49a25148..4cd0a333 100644
--- a/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreHandlers.cs
+++ b/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreHandlers.cs
@@ -1093,6 +1093,11 @@ public static partial class OpenIddictServerAspNetCoreHandlers
///
public sealed class ProcessJsonResponse : IOpenIddictServerHandler where TContext : BaseRequestContext
{
+ private readonly IOptionsMonitor _options;
+
+ public ProcessJsonResponse(IOptionsMonitor options)
+ => _options = options ?? throw new ArgumentNullException(nameof(options));
+
///
/// Gets the default descriptor definition assigned to this handler.
///
@@ -1125,7 +1130,7 @@ public static partial class OpenIddictServerAspNetCoreHandlers
using var writer = new Utf8JsonWriter(stream, new JsonWriterOptions
{
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
- Indented = true
+ Indented = !_options.CurrentValue.SuppressJsonResponseIndentation
});
context.Transaction.Response.WriteTo(writer);
diff --git a/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreOptions.cs b/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreOptions.cs
index c1339f96..c2225387 100644
--- a/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreOptions.cs
+++ b/src/OpenIddict.Server.AspNetCore/OpenIddictServerAspNetCoreOptions.cs
@@ -93,6 +93,11 @@ public sealed class OpenIddictServerAspNetCoreOptions : AuthenticationSchemeOpti
///
public bool EnableStatusCodePagesIntegration { get; set; }
+ ///
+ /// Gets or sets a boolean whether JSON response indentation should be suppressed or not.
+ ///
+ public bool SuppressJsonResponseIndentation { get; set; }
+
///
/// Gets or sets the optional "realm" value returned to the caller as part of the WWW-Authenticate header.
///
diff --git a/src/OpenIddict.Server.Owin/OpenIddictServerOwinBuilder.cs b/src/OpenIddict.Server.Owin/OpenIddictServerOwinBuilder.cs
index 496e4cde..d9d54316 100644
--- a/src/OpenIddict.Server.Owin/OpenIddictServerOwinBuilder.cs
+++ b/src/OpenIddict.Server.Owin/OpenIddictServerOwinBuilder.cs
@@ -135,6 +135,13 @@ public sealed class OpenIddictServerOwinBuilder
public OpenIddictServerOwinBuilder EnableLogoutRequestCaching()
=> Configure(options => options.EnableLogoutRequestCaching = true);
+ ///
+ /// Suppresses indentation for the JSON responses returned by the OWIN host.
+ ///
+ /// The instance.
+ public OpenIddictServerOwinBuilder SuppressJsonResponseIndentation()
+ => Configure(options => options.SuppressJsonResponseIndentation = true);
+
///
/// Sets the realm returned to the caller as part of the WWW-Authenticate header.
///
diff --git a/src/OpenIddict.Server.Owin/OpenIddictServerOwinHandlers.cs b/src/OpenIddict.Server.Owin/OpenIddictServerOwinHandlers.cs
index bad0b98a..8379b87a 100644
--- a/src/OpenIddict.Server.Owin/OpenIddictServerOwinHandlers.cs
+++ b/src/OpenIddict.Server.Owin/OpenIddictServerOwinHandlers.cs
@@ -1265,6 +1265,11 @@ public static partial class OpenIddictServerOwinHandlers
///
public sealed class ProcessJsonResponse : IOpenIddictServerHandler where TContext : BaseRequestContext
{
+ private readonly IOptionsMonitor _options;
+
+ public ProcessJsonResponse(IOptionsMonitor options)
+ => _options = options ?? throw new ArgumentNullException(nameof(options));
+
///
/// Gets the default descriptor definition assigned to this handler.
///
@@ -1297,7 +1302,7 @@ public static partial class OpenIddictServerOwinHandlers
using var writer = new Utf8JsonWriter(stream, new JsonWriterOptions
{
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
- Indented = true
+ Indented = !_options.CurrentValue.SuppressJsonResponseIndentation
});
context.Transaction.Response.WriteTo(writer);
diff --git a/src/OpenIddict.Server.Owin/OpenIddictServerOwinOptions.cs b/src/OpenIddict.Server.Owin/OpenIddictServerOwinOptions.cs
index 4c4ff3e5..9bd0d0c6 100644
--- a/src/OpenIddict.Server.Owin/OpenIddictServerOwinOptions.cs
+++ b/src/OpenIddict.Server.Owin/OpenIddictServerOwinOptions.cs
@@ -90,6 +90,11 @@ public sealed class OpenIddictServerOwinOptions : AuthenticationOptions
///
public bool EnableLogoutRequestCaching { get; set; }
+ ///
+ /// Gets or sets a boolean whether JSON response indentation should be suppressed or not.
+ ///
+ public bool SuppressJsonResponseIndentation { get; set; }
+
///
/// Gets or sets the optional "realm" value returned to the caller as part of the WWW-Authenticate header.
///