[java-idp-plugin-oidc-rp] branch main updated: Add acr_values to request object if claims claim is not supported

Phil Smart philip.smart at jisc.ac.uk
Tue Jan 3 11:31:22 UTC 2023


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

philsmart pushed a commit to branch main
in repository java-idp-plugin-oidc-rp.

View the commit online:
http://git.shibboleth.net/view/?p=java-idp-plugin-oidc-rp.git;a=commit;h=91a102f113039b93a8739d5faf13ddc5e4462957

The following commit(s) were added to refs/heads/main by this push:
     new 91a102f  Add acr_values to request object if claims claim is not supported
91a102f is described below

commit 91a102f113039b93a8739d5faf13ddc5e4462957
Author: Phil Smart <philip.smart at jisc.ac.uk>
AuthorDate: Tue Jan 3 11:31:20 2023 +0000

    Add acr_values to request object if claims claim is not supported
---
 .../authn/oidc/rp/impl/BuildRequestObject.java     | 11 +++++++-
 .../authn/oidc/rp/impl/BuildRequestObjectTest.java | 29 ++++++++++++++++++++++
 2 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/idp-oidc-rp-impl/src/main/java/net/shibboleth/idp/plugin/authn/oidc/rp/impl/BuildRequestObject.java b/idp-oidc-rp-impl/src/main/java/net/shibboleth/idp/plugin/authn/oidc/rp/impl/BuildRequestObject.java
index e18a555..5d983e1 100644
--- a/idp-oidc-rp-impl/src/main/java/net/shibboleth/idp/plugin/authn/oidc/rp/impl/BuildRequestObject.java
+++ b/idp-oidc-rp-impl/src/main/java/net/shibboleth/idp/plugin/authn/oidc/rp/impl/BuildRequestObject.java
@@ -20,6 +20,7 @@ package net.shibboleth.idp.plugin.authn.oidc.rp.impl;
 import java.time.Duration;
 import java.util.function.Function;
 import java.util.function.Predicate;
+import java.util.stream.Collectors;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -37,6 +38,7 @@ import com.google.common.base.Predicates;
 import com.nimbusds.jwt.JWT;
 import com.nimbusds.oauth2.sdk.id.Audience;
 import com.nimbusds.oauth2.sdk.id.Issuer;
+import com.nimbusds.openid.connect.sdk.claims.ACR;
 import com.nimbusds.openid.connect.sdk.claims.ClaimsSet;
 import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 
@@ -247,7 +249,14 @@ public class BuildRequestObject extends AbstractAuthenticationAction {
             if (authnRequest.getRequestedClaims() != null) {
                 requestObjectClaims.setClaim("claims", authnRequest.getRequestedClaims());
             }
-        }     
+        } else if (!authnRequest.getAcrs().isEmpty()) {        
+            // Only add ACR values as acr_values if the provider does not support the 'claims' claim.             
+            final String acrString = String.join(" ", authnRequest.getAcrs()
+                    .stream()
+                    .map(ACR::getValue)
+                    .collect(Collectors.toUnmodifiableList()));
+            requestObjectClaims.setClaim("acr_values", acrString);
+        }
         
         // Validate the request object
         if (!validateRequestObject(profileRequestContext, requestObjectClaims)) {
diff --git a/idp-oidc-rp-impl/src/test/java/net/shibboleth/idp/plugin/authn/oidc/rp/impl/BuildRequestObjectTest.java b/idp-oidc-rp-impl/src/test/java/net/shibboleth/idp/plugin/authn/oidc/rp/impl/BuildRequestObjectTest.java
index bf8da7f..afd2cff 100644
--- a/idp-oidc-rp-impl/src/test/java/net/shibboleth/idp/plugin/authn/oidc/rp/impl/BuildRequestObjectTest.java
+++ b/idp-oidc-rp-impl/src/test/java/net/shibboleth/idp/plugin/authn/oidc/rp/impl/BuildRequestObjectTest.java
@@ -127,6 +127,35 @@ public class BuildRequestObjectTest extends AbstractOIDCTest {
         assertTrue(isValidJSON(claims.toJSONString()));
     }
     
+    /* Test building acr_values when the claims claim is not supported.*/
+    @Test
+    public void testBuildRequestObject_WithACRs_ClaimsNotSupported_Success() throws ComponentInitializationException {
+        
+        authnRequest.setProviderSupportsClaimsParameter(false);
+        authnRequest.setAcrs(List.of(new ACR("urn:mace:incommon:iap:silver")));
+        
+        action.initialize();        
+        final Event event = action.execute(src);
+        assertNull(event);
+        assertNotNull(prc.getOutboundMessageContext().getMessage());
+        assertNotNull(((OIDCAuthenticationRequest)prc.getOutboundMessageContext()
+                .getMessage()).getRequestObjectClaimsSet());
+        final ClaimsSet claims = (((OIDCAuthenticationRequest)prc.getOutboundMessageContext()
+                .getMessage()).getRequestObjectClaimsSet());
+        assertEquals(claims.getStringClaim("scope"),"openid");
+        assertEquals(claims.getStringClaim("iss"),"https://rp.example.com");
+        assertEquals(claims.getStringClaim("client_id"),"https://rp.example.com");
+        assertEquals(claims.getStringClaim("response_type"),"code");
+        assertEquals(claims.getNumberClaim("max_age").longValue(),60);
+        assertEquals(claims.getStringClaim("redirect_uri"),"https://rp.example.com/callback");
+        assertNotNull(claims.getStringClaim("nonce"));
+        assertNotNull(claims.getClaim("aud"));
+        assertNull(claims.getClaim("claims"));
+        
+        // Now test acr_values
+        assertEquals(claims.getStringClaim("acr_values"),"urn:mace:incommon:iap:silver");
+    }
+    
     @Test
     public void testBuildRequestObject_WithACRsAndExistingRequestedClaims_Success() throws ComponentInitializationException {
         

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


More information about the commits mailing list