Skip to content

Commit 34ffba5

Browse files
committed
Merge the changes made in the rel/7.4.0 branch
2 parents e4bf89e + 2cf8f4f commit 34ffba5

File tree

5 files changed

+64
-0
lines changed

5 files changed

+64
-0
lines changed

src/OpenIddict.Client.WebIntegration/OpenIddictClientWebIntegrationHandlers.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public static partial class OpenIddictClientWebIntegrationHandlers
2222
/*
2323
* Authentication processing:
2424
*/
25+
DisableIssuerParameterValidation.Descriptor,
2526
ValidateRedirectionRequestSignature.Descriptor,
2627
HandleNonStandardFrontchannelErrorResponse.Descriptor,
2728
ValidateNonStandardParameters.Descriptor,
@@ -68,6 +69,45 @@ public static partial class OpenIddictClientWebIntegrationHandlers
6869
.. UserInfo.DefaultHandlers
6970
];
7071

72+
/// <summary>
73+
/// Contains the logic responsible for disabling the issuer parameter validation for the providers that require it.
74+
/// </summary>
75+
public sealed class DisableIssuerParameterValidation : IOpenIddictClientHandler<ProcessAuthenticationContext>
76+
{
77+
/// <summary>
78+
/// Gets the default descriptor definition assigned to this handler.
79+
/// </summary>
80+
public static OpenIddictClientHandlerDescriptor Descriptor { get; }
81+
= OpenIddictClientHandlerDescriptor.CreateBuilder<ProcessAuthenticationContext>()
82+
.UseSingletonHandler<DisableIssuerParameterValidation>()
83+
.SetOrder(ValidateIssuerParameter.Descriptor.Order - 500)
84+
.SetType(OpenIddictClientHandlerType.BuiltIn)
85+
.Build();
86+
87+
/// <inheritdoc/>
88+
public ValueTask HandleAsync(ProcessAuthenticationContext context)
89+
{
90+
ArgumentNullException.ThrowIfNull(context);
91+
92+
context.DisableIssuerParameterValidation = context.Registration.ProviderType switch
93+
{
94+
// Google is currently rolling out a change that causes the "iss" authorization response
95+
// parameter to be returned without the "authorization_response_iss_parameter_supported"
96+
// flag being advertised in the provider metadata. Since OpenIddict rejects authorization
97+
// responses that contain an issuer if "authorization_response_iss_parameter_supported" is
98+
// not explicitly set to true, validation must be disabled until the deployment is complete.
99+
//
100+
// See https://github.com/openiddict/openiddict-core/issues/2428 for more information.
101+
ProviderTypes.Google when context.Request.HasParameter(Parameters.Iss) &&
102+
context.Configuration.AuthorizationResponseIssParameterSupported is not true => true,
103+
104+
_ => context.DisableIssuerParameterValidation
105+
};
106+
107+
return ValueTask.CompletedTask;
108+
}
109+
}
110+
71111
/// <summary>
72112
/// Contains the logic responsible for validating the signature or message authentication
73113
/// code attached to the redirection request for the providers that require it.

src/OpenIddict.Client/OpenIddictClientEvents.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,6 +1012,14 @@ public OpenIddictRequest Request
10121012
/// </remarks>
10131013
public bool DisableFrontchannelIdentityTokenNonceValidation { get; set; }
10141014

1015+
/// <summary>
1016+
/// Gets or sets a boolean indicating whether issuer parameter validation should be disabled.
1017+
/// </summary>
1018+
/// <remarks>
1019+
/// Note: overriding the value of this property is generally not recommended.
1020+
/// </remarks>
1021+
public bool DisableIssuerParameterValidation { get; set; }
1022+
10151023
/// <summary>
10161024
/// Gets or sets a boolean indicating whether userinfo retrieval should be disabled.
10171025
/// </summary>

src/OpenIddict.Client/OpenIddictClientExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public static OpenIddictClientBuilder AddClient(this OpenIddictBuilder builder)
5050
builder.Services.TryAddSingleton<RequireIntrospectionClientAssertionGenerated>();
5151
builder.Services.TryAddSingleton<RequireIntrospectionRequest>();
5252
builder.Services.TryAddSingleton<RequireIssuedTokenValidated>();
53+
builder.Services.TryAddSingleton<RequireIssuerParameterValidationEnabled>();
5354
builder.Services.TryAddSingleton<RequireLoginStateTokenGenerated>();
5455
builder.Services.TryAddSingleton<RequireLogoutStateTokenGenerated>();
5556
builder.Services.TryAddSingleton<RequireJsonWebTokenFormat>();

src/OpenIddict.Client/OpenIddictClientHandlerFilters.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,20 @@ public ValueTask<bool> IsActiveAsync(ProcessAuthenticationContext context)
266266
}
267267
}
268268

269+
/// <summary>
270+
/// Represents a filter that excludes the associated handlers if issuer parameter validation was disabled.
271+
/// </summary>
272+
public sealed class RequireIssuerParameterValidationEnabled : IOpenIddictClientHandlerFilter<ProcessAuthenticationContext>
273+
{
274+
/// <inheritdoc/>
275+
public ValueTask<bool> IsActiveAsync(ProcessAuthenticationContext context)
276+
{
277+
ArgumentNullException.ThrowIfNull(context);
278+
279+
return new(!context.DisableIssuerParameterValidation);
280+
}
281+
}
282+
269283
/// <summary>
270284
/// Represents a filter that excludes the associated handlers if the selected token format is not JSON Web Token.
271285
/// </summary>

src/OpenIddict.Client/OpenIddictClientHandlers.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,6 +1171,7 @@ public sealed class ValidateIssuerParameter : IOpenIddictClientHandler<ProcessAu
11711171
/// </summary>
11721172
public static OpenIddictClientHandlerDescriptor Descriptor { get; }
11731173
= OpenIddictClientHandlerDescriptor.CreateBuilder<ProcessAuthenticationContext>()
1174+
.AddFilter<RequireIssuerParameterValidationEnabled>()
11741175
.AddFilter<RequireRedirectionRequest>()
11751176
.UseSingletonHandler<ValidateIssuerParameter>()
11761177
.SetOrder(ResolveClientRegistrationFromStateToken.Descriptor.Order + 1_000)

0 commit comments

Comments
 (0)