- Support has been added for "RFC7636: Proof Key for Code Exchange by OAuth Public Clients" (PKCE, pronounced "pixy") to mitigate against attacks targeting the interception of the authorization code
- PkceParameterNames was added for the 3 additional parameters used by PKCE (i.e. code_verifier, code_challenge, and code_challenge_method)
- Default code_verifier length has been set to 128 characters--the maximum allowed by RFC7636
- ClientAuthenticationMethod.NONE was added to allow clients to request tokens without providing a client secret
Fixes gh-6446
@ -74,11 +75,20 @@ public class OAuth2AuthorizationCodeGrantRequestEntityConverter implements Conve
@@ -74,11 +75,20 @@ public class OAuth2AuthorizationCodeGrantRequestEntityConverter implements Conve
@ -63,12 +67,16 @@ public class WebClientReactiveAuthorizationCodeTokenResponseClient implements Re
@@ -63,12 +67,16 @@ public class WebClientReactiveAuthorizationCodeTokenResponseClient implements Re
@ -83,14 +91,24 @@ public class WebClientReactiveAuthorizationCodeTokenResponseClient implements Re
@@ -83,14 +91,24 @@ public class WebClientReactiveAuthorizationCodeTokenResponseClient implements Re
@ -500,6 +500,11 @@ public final class ClientRegistration implements Serializable {
@@ -500,6 +500,11 @@ public final class ClientRegistration implements Serializable {
thrownewIllegalArgumentException("Only ClientAuthenticationMethod.BASIC and ClientAuthenticationMethod.POST are supported. The issuer \""+issuer+"\" returned a configuration of "+metadataAuthMethods);
thrownewIllegalArgumentException("Only ClientAuthenticationMethod.BASIC, ClientAuthenticationMethod.POST and ClientAuthenticationMethod.NONE are supported. The issuer \""+issuer+"\" returned a configuration of "+metadataAuthMethods);
@ -52,6 +57,7 @@ public final class DefaultOAuth2AuthorizationRequestResolver implements OAuth2Au
@@ -52,6 +57,7 @@ public final class DefaultOAuth2AuthorizationRequestResolver implements OAuth2Au
@ -102,9 +108,17 @@ public final class DefaultOAuth2AuthorizationRequestResolver implements OAuth2Au
@@ -102,9 +108,17 @@ public final class DefaultOAuth2AuthorizationRequestResolver implements OAuth2Au
thrownewIllegalArgumentException("Invalid Client Registration with Id: "+registrationId);
@ -115,9 +129,6 @@ public final class DefaultOAuth2AuthorizationRequestResolver implements OAuth2Au
@@ -115,9 +129,6 @@ public final class DefaultOAuth2AuthorizationRequestResolver implements OAuth2Au
@ -156,4 +167,34 @@ public final class DefaultOAuth2AuthorizationRequestResolver implements OAuth2Au
@@ -156,4 +167,34 @@ public final class DefaultOAuth2AuthorizationRequestResolver implements OAuth2Au
@ -68,6 +73,8 @@ public class DefaultServerOAuth2AuthorizationRequestResolver
@@ -68,6 +73,8 @@ public class DefaultServerOAuth2AuthorizationRequestResolver
@ -124,6 +131,11 @@ public class DefaultServerOAuth2AuthorizationRequestResolver
@@ -124,6 +131,11 @@ public class DefaultServerOAuth2AuthorizationRequestResolver
@ -164,4 +176,34 @@ public class DefaultServerOAuth2AuthorizationRequestResolver
@@ -164,4 +176,34 @@ public class DefaultServerOAuth2AuthorizationRequestResolver
@ -55,33 +57,77 @@ public class OAuth2AuthorizationCodeGrantRequestEntityConverterTests {
@@ -55,33 +57,77 @@ public class OAuth2AuthorizationCodeGrantRequestEntityConverterTests {
@ -91,7 +137,7 @@ public class OAuth2AuthorizationCodeGrantRequestEntityConverterTests {
@@ -91,7 +137,7 @@ public class OAuth2AuthorizationCodeGrantRequestEntityConverterTests {
@ -99,5 +145,7 @@ public class OAuth2AuthorizationCodeGrantRequestEntityConverterTests {
@@ -99,5 +145,7 @@ public class OAuth2AuthorizationCodeGrantRequestEntityConverterTests {
@ -84,6 +87,9 @@ public class WebClientReactiveAuthorizationCodeTokenResponseClientTests {
@@ -84,6 +87,9 @@ public class WebClientReactiveAuthorizationCodeTokenResponseClientTests {
@ -288,4 +294,51 @@ public class WebClientReactiveAuthorizationCodeTokenResponseClientTests {
@@ -288,4 +294,51 @@ public class WebClientReactiveAuthorizationCodeTokenResponseClientTests {
@ -208,7 +218,7 @@ public class ClientRegistrationsTest {
@@ -208,7 +218,7 @@ public class ClientRegistrationsTest {
assertThatThrownBy(()->registration(""))
.isInstanceOf(IllegalArgumentException.class)
.hasMessageContaining("Only ClientAuthenticationMethod.BASIC and ClientAuthenticationMethod.POST are supported. The issuer \""+this.issuer+"\" returned a configuration of [tls_client_auth]");
.hasMessageContaining("Only ClientAuthenticationMethod.BASIC, ClientAuthenticationMethod.POST and ClientAuthenticationMethod.NONE are supported. The issuer \""+this.issuer+"\" returned a configuration of [tls_client_auth]");
}
@Test
@ -229,7 +239,7 @@ public class ClientRegistrationsTest {
@@ -229,7 +239,7 @@ public class ClientRegistrationsTest {
.hasMessageContaining("The Issuer \"https://example.com\" provided in the OpenID Configuration did not match the requested issuer \""+this.issuer+"\"");
@ -47,8 +50,15 @@ public class DefaultOAuth2AuthorizationRequestResolverTests {
@@ -47,8 +50,15 @@ public class DefaultOAuth2AuthorizationRequestResolverTests {
@ -255,4 +265,40 @@ public class DefaultOAuth2AuthorizationRequestResolverTests {
@@ -255,4 +265,40 @@ public class DefaultOAuth2AuthorizationRequestResolverTests {
@ -87,4 +89,24 @@ public class DefaultServerOAuth2AuthorizationRequestResolverTests {
@@ -87,4 +89,24 @@ public class DefaultServerOAuth2AuthorizationRequestResolverTests {
@ -31,6 +31,12 @@ public final class ClientAuthenticationMethod implements Serializable {
@@ -31,6 +31,12 @@ public final class ClientAuthenticationMethod implements Serializable {