[java-idp-plugin-vci] branch main updated: Enforce PKCE and PAR

Codeberg noreply at shibboleth.net
Mon Sep 14 06:37:36 UTC 2026


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

codeberg pushed a commit to branch main
in repository java-idp-plugin-vci.

View the commit online:
https://codeberg.org/Shibboleth/java-idp-plugin-vci/commit/8822055510a7ee13f35dfd167ec23071b633a698

The following commit(s) were added to refs/heads/main by this push:
     new 8822055  Enforce PKCE and PAR
8822055 is described below

commit 8822055510a7ee13f35dfd167ec23071b633a698
Author: Janne Lauros <janne.lauros at csc.fi>
AuthorDate: Mon Sep 14 09:37:26 2026 +0300

    Enforce PKCE and PAR
---
 README.md                                          | 29 +++++++++++++++++++---
 .../static/oauth-authorization-server.json         |  4 +++
 2 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 6bdbb1b..0c7477b 100644
--- a/README.md
+++ b/README.md
@@ -719,7 +719,9 @@ code flow:
           <property name="profileConfigurations">
               <list>
                   <bean parent="OIDC.SSO"
-                        p:authorizationCodeClaimsSetManipulationStrategy-ref="openidvci.TokenManipulationStrategy" />
+                        p:authorizationCodeClaimsSetManipulationStrategy-ref="openidvci.TokenManipulationStrategy"
+                        p:forcePKCE="true"
+                        p:requirePushedAuthorizationRequest="true" />
                   <bean parent="OpenID.VCI.Token"
                         p:tokenEndpointAuthMethods="#{{'none'}}"
                         p:accessTokenClaimsSetManipulationStrategy-ref="openidvci.TokenManipulationStrategy"
@@ -1302,6 +1304,7 @@ See [DID.Document](#diddocument).
    "issuer":"$issuer",
    "authorization_endpoint":"$baseUrl/idp/profile/oidc/authorize",
    "pushed_authorization_request_endpoint":"$baseUrl/idp/profile/oauth2/pushed-authorization",
+   "require_pushed_authorization_requests":true,
    "token_endpoint":"$baseUrl/idp/profile/openid/vci/token",
    "jwks_uri":"$baseUrl/idp/profile/oidc/keyset",
    "token_endpoint_auth_methods_supported":[
@@ -1313,6 +1316,12 @@ See [DID.Document](#diddocument).
    "response_types_supported":[
       "code"
    ],
+   "code_challenge_methods_supported":[
+      "S256"
+   ],
+   "scopes_supported":[
+      "openid"
+   ],
    "authorization_details_types_supported":[
       "openid_credential"
    ]
@@ -1321,6 +1330,16 @@ See [DID.Document](#diddocument).
 
 </details>
 
+`require_pushed_authorization_requests` and `code_challenge_methods_supported` describe the OP,
+they do not configure it. Both are off in the OP by default. Back them on the **OIDC.SSO** bean:
+
+```xml
+<bean parent="OIDC.SSO"
+      p:authorizationCodeClaimsSetManipulationStrategy-ref="openidvci.TokenManipulationStrategy"
+      p:forcePKCE="true"
+      p:requirePushedAuthorizationRequest="true" />
+```
+
 Then the paths. No `/.well-known/` location is an IdP path, so you wire each one to its
 endpoint in Jetty. Wallets that run in a browser need also `Access-Control-Allow-Origin` in the
 responses, so that header belongs to the same file. With Jetty rewrite handler:
@@ -1869,7 +1888,9 @@ examples of this document. `OIDC.Keyset`, `OIDC.Configuration`, `OAUTH2.TokenAud
                 <ref bean="OAuth.StatusList" />
                 <!-- The three below are for unregistered wallets running the code flow -->
                 <bean parent="OIDC.SSO"
-                      p:authorizationCodeClaimsSetManipulationStrategy-ref="openidvci.TokenManipulationStrategy" />
+                      p:authorizationCodeClaimsSetManipulationStrategy-ref="openidvci.TokenManipulationStrategy"
+                      p:forcePKCE="true"
+                      p:requirePushedAuthorizationRequest="true" />
                 <bean parent="OpenID.VCI.Token"
                       p:tokenEndpointAuthMethods="#{{'none'}}"
                       p:accessTokenClaimsSetManipulationStrategy-ref="openidvci.TokenManipulationStrategy" />
@@ -1914,7 +1935,9 @@ examples of this document. `OIDC.Keyset`, `OIDC.Configuration`, `OAUTH2.TokenAud
           <property name="profileConfigurations">
               <list>
                   <bean parent="OIDC.SSO"
-                        p:authorizationCodeClaimsSetManipulationStrategy-ref="openidvci.TokenManipulationStrategy" />
+                        p:authorizationCodeClaimsSetManipulationStrategy-ref="openidvci.TokenManipulationStrategy"
+                        p:forcePKCE="true"
+                        p:requirePushedAuthorizationRequest="true" />
                   <bean parent="OpenID.VCI.Token"
                         p:tokenEndpointAuthMethods="#{{'none'}}"
                         p:accessTokenClaimsSetManipulationStrategy-ref="openidvci.TokenManipulationStrategy"
diff --git a/openid-vci-impl/src/main/resources/org/geant/shibboleth/plugin/openidvci/static/oauth-authorization-server.json b/openid-vci-impl/src/main/resources/org/geant/shibboleth/plugin/openidvci/static/oauth-authorization-server.json
index 0789d4e..75267e7 100644
--- a/openid-vci-impl/src/main/resources/org/geant/shibboleth/plugin/openidvci/static/oauth-authorization-server.json
+++ b/openid-vci-impl/src/main/resources/org/geant/shibboleth/plugin/openidvci/static/oauth-authorization-server.json
@@ -2,6 +2,7 @@
    "issuer":"$issuer",
    "authorization_endpoint":"$baseUrl/idp/profile/oidc/authorize",
    "pushed_authorization_request_endpoint":"$baseUrl/idp/profile/oauth2/pushed-authorization",
+   "require_pushed_authorization_requests":true,
    "token_endpoint":"$baseUrl/idp/profile/openid/vci/token",
    "jwks_uri":"$baseUrl/idp/profile/oidc/keyset",
    "token_endpoint_auth_methods_supported":[
@@ -13,6 +14,9 @@
    "response_types_supported":[
       "code"
    ],
+   "code_challenge_methods_supported":[
+      "S256"
+   ],
    "scopes_supported":[
       "openid"
    ],

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


More information about the commits mailing list