[java-oidc-common] branch main updated: JSHIBDOIDC-6 - Add back PKCE support

Codeberg noreply at shibboleth.net
Thu Apr 16 16:29:35 UTC 2026


This is an automated email from the git hooks/post-receive script.

codeberg pushed a commit to branch main
in repository java-oidc-common.

View the commit online:
https://codeberg.org/Shibboleth/java-oidc-common/commit/c709fa4ad121d5b92615c74f067a7a5f33ef1764

The following commit(s) were added to refs/heads/main by this push:
     new c709fa4a JSHIBDOIDC-6 - Add back PKCE support
c709fa4a is described below

commit c709fa4ad121d5b92615c74f067a7a5f33ef1764
Author: Phil Smart <philip.smart at jisc.ac.uk>
AuthorDate: Thu Apr 16 17:25:59 2026 +0100

    JSHIBDOIDC-6 - Add back PKCE support
    
         - Add back PKCE support to the token request encoder
    
    https://shibboleth.atlassian.net/browse/JSHIBDOIDC-6
---
 .../encoding/impl/AuthCodeTokenRequestEncoder.java | 33 ++++++++++++++--------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/encoding/impl/AuthCodeTokenRequestEncoder.java b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/encoding/impl/AuthCodeTokenRequestEncoder.java
index f39e8393..f9475f19 100644
--- a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/encoding/impl/AuthCodeTokenRequestEncoder.java
+++ b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/encoding/impl/AuthCodeTokenRequestEncoder.java
@@ -31,6 +31,7 @@ import com.nimbusds.oauth2.sdk.AuthorizationCodeGrant;
 import com.nimbusds.oauth2.sdk.AuthorizationGrant;
 import com.nimbusds.oauth2.sdk.TokenRequest;
 import com.nimbusds.oauth2.sdk.http.HTTPRequest;
+import com.nimbusds.oauth2.sdk.pkce.CodeVerifier;
 import com.nimbusds.openid.connect.sdk.AuthenticationSuccessResponse;
 import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 
@@ -48,6 +49,9 @@ public class AuthCodeTokenRequestEncoder extends AbstractRequestEncoderFunction
     /** Class logger. */
     @Nonnull
     private final Logger log = LoggerFactory.getLogger(AuthCodeTokenRequestEncoder.class);
+
+    /** The lookup strategy to pull out the PKCE code_verifier to send in the token request.*/
+    @Nonnull private Function<ProfileRequestContext, String> pkceCodeVerifierLookupStrategy;
     
    /** 
     * The strategy used to look up the redirect URI to use in the token request. This will typically be the same 
@@ -59,12 +63,13 @@ public class AuthCodeTokenRequestEncoder extends AbstractRequestEncoderFunction
     public AuthCodeTokenRequestEncoder() {
         super();
         redirectUriLookupStrategy = FunctionSupport.constant(null);
+        pkceCodeVerifierLookupStrategy = FunctionSupport.constant(null);
     }
     
     /**
      * Set the strategy used to look up the redirect URI to use in the token request. This will typically be the same 
      * URI used in the authorization request, but may be overridden if necessary. If not set, no redirect URI will be 
-     * included in the token request which may result in an error on the OpenID Provider.
+     * included in the token request which may result in an error at the OpenID Provider.
      * 
      * @param strategy The RedirectUriLookupStrategy to set.
      */
@@ -73,6 +78,18 @@ public class AuthCodeTokenRequestEncoder extends AbstractRequestEncoderFunction
                 "RedirectUriLookupStrategy can not be null");
     }
     
+    /**
+     * Set the strategy used to look up the PKCE code_verifier to send in the token request.
+     * 
+     * @param strategy The PKCE lookup strategy to set.
+     */
+    public void setPkceCodeVerifierLookupStrategy(
+            @Nonnull final Function<ProfileRequestContext, String> strategy) {
+        checkSetterPreconditions();
+        pkceCodeVerifierLookupStrategy = Constraint.isNotNull(strategy,
+                "PKCE code verifier lookup strategy can not be null");
+    }
+    
     @Override
     @Nullable public ClassicHttpRequest doApply(@Nonnull final ProfileRequestContext profileRequestContext,
             @Nonnull final OIDCProviderMetadata providerMetadata) {
@@ -88,20 +105,14 @@ public class AuthCodeTokenRequestEncoder extends AbstractRequestEncoderFunction
                 log.warn("No authentication response from upstream OpenID Provider to base token request off");
                 return null;
             }
-           // final var authnRequest = getAuthenticationRequest();
-           // if (authnRequest == null) {
-            //    log.warn("No authentication request to base token request off");
-            //    return null;
-            //}
-            
+
             final URI redirectUri = redirectUriLookupStrategy.apply(profileRequestContext);
+            final String pkceCodeVerifier = pkceCodeVerifierLookupStrategy.apply(profileRequestContext);
             
-            // TODO finish this encoder!
             // If PKCE was set in the request (is not null) use it, else set it to null
             final AuthorizationGrant codeGrant =
-                    new AuthorizationCodeGrant(authnResponse.getAuthorizationCode(),redirectUri);  
-                           // authnRequest.getCodeVerifier() != null ? new CodeVerifier(authnRequest.getCodeVerifier()) 
-                            //        : null);
+                    new AuthorizationCodeGrant(authnResponse.getAuthorizationCode(),redirectUri,  
+                            pkceCodeVerifier != null ? new CodeVerifier(pkceCodeVerifier) : null);
             
             final TokenRequest tokenRequest = new TokenRequest(providerMetadata.getTokenEndpointURI(),
                             authnContext.getClientAuthentication(), codeGrant);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list