[java-oidc-common] branch main updated: JOIDC-152 - Implement maximum refresh time and/or maximum refresh uses.

Henri Mikkonen henri.mikkonen at iki.fi
Wed May 3 09:29:02 UTC 2023


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

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

View the commit online:
http://git.shibboleth.net/view/?p=java-oidc-common.git;a=commit;h=c1c542d09a215b70f3bf409863dbc4c951486ade

The following commit(s) were added to refs/heads/main by this push:
     new c1c542d  JOIDC-152 - Implement maximum refresh time and/or maximum refresh uses.
c1c542d is described below

commit c1c542d09a215b70f3bf409863dbc4c951486ade
Author: Henri Mikkonen <henri.mikkonen at iki.fi>
AuthorDate: Wed May 3 12:24:50 2023 +0300

    JOIDC-152 - Implement maximum refresh time and/or maximum refresh uses.
    
    https://shibboleth.atlassian.net/browse/JOIDC-152
    
    - Modified setRefreshTokenLifetime to log deprecation warning.
    - Modified getRefreshTokenTimeout(PRC) to exploit refreshTokenLifetimeLookupStrategy if it returns non-default value
      - In that case we may expect that the default function has been modified either via relying-party.xml or SAML metadata entity attributes
      - Deprecation warning is logged
      - If old (lifetimeLookup) returns default 2 hours, then method returns the value from new (timeoutLookup) function
---
 .../config/impl/AbstractOIDCSSOConfiguration.java  | 20 ++++++++++---
 .../impl/OIDCCoreProtocolConfigurationTest.java    | 34 +++++++++++++++++++++-
 2 files changed, 49 insertions(+), 5 deletions(-)

diff --git a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/config/impl/AbstractOIDCSSOConfiguration.java b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/config/impl/AbstractOIDCSSOConfiguration.java
index 03a03cf..8f46fc3 100644
--- a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/config/impl/AbstractOIDCSSOConfiguration.java
+++ b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/config/impl/AbstractOIDCSSOConfiguration.java
@@ -42,7 +42,9 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Positive;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.logic.FunctionSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
 
 /**
  * Base class for profiles that support OIDC's concept of SSO, which spans multiple endpoints.
@@ -356,10 +358,9 @@ public abstract class AbstractOIDCSSOConfiguration extends AbstractOAuth2FlowAwa
      */
     @Deprecated(since = "2.2.0", forRemoval=true)
     public void setRefreshTokenLifetime(@Nonnull @Positive final Duration lifetime) {
-        Constraint.isTrue(lifetime != null && !lifetime.isZero() && !lifetime.isNegative(),
-                "Refresh token lifetime must be greater than 0");
-        
-        refreshTokenLifetimeLookupStrategy = FunctionSupport.constant(lifetime);
+        DeprecationSupport.warnOnce(ObjectType.METHOD, "setRefreshTokenLifetime",
+                getClass().getCanonicalName(), "setRefreshTokenTimeout");
+        setRefreshTokenTimeout(lifetime);
     }
 
     /**
@@ -378,6 +379,17 @@ public abstract class AbstractOIDCSSOConfiguration extends AbstractOAuth2FlowAwa
     @Override
     @Nonnull @Positive
     public Duration getRefreshTokenTimeout(@Nullable final ProfileRequestContext profileRequestContext) {
+        // the block starting from here can be removed once refreshTokenLifetime is removed
+        final Duration deprecatedLifetime = refreshTokenLifetimeLookupStrategy.apply(profileRequestContext);
+        if (!Duration.ofHours(2).equals(deprecatedLifetime)) {
+            DeprecationSupport.warnOnce(ObjectType.METHOD, "setRefreshTokenLifetimeLookupStrategy",
+                    getClass().getCanonicalName(), "setRefreshTokenTimeoutLookupStrategy");  
+            Constraint.isTrue(deprecatedLifetime != null && !deprecatedLifetime.isZero() && 
+                    !deprecatedLifetime.isNegative(), "Refresh token lifetime must be greater than 0");
+            return deprecatedLifetime;
+        }
+        // the block ends
+
         final Duration timeout = refreshTokenTimeoutLookupStrategy.apply(profileRequestContext);
         
         Constraint.isTrue(timeout != null && !timeout.isZero() && !timeout.isNegative(),
diff --git a/oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/config/impl/OIDCCoreProtocolConfigurationTest.java b/oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/config/impl/OIDCCoreProtocolConfigurationTest.java
index 457c969..fe969e2 100644
--- a/oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/config/impl/OIDCCoreProtocolConfigurationTest.java
+++ b/oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/config/impl/OIDCCoreProtocolConfigurationTest.java
@@ -54,6 +54,8 @@ public class OIDCCoreProtocolConfigurationTest {
         Assert.assertEquals(config.getIDTokenLifetime(null), Duration.ofHours(1));
         Assert.assertEquals(config.getAccessTokenLifetime(null), Duration.ofMinutes(10));
         Assert.assertEquals(config.getRefreshTokenLifetime(null), Duration.ofHours(2));
+        Assert.assertEquals(config.getRefreshTokenTimeout(null), Duration.ofHours(2));
+        Assert.assertEquals(config.getRefreshTokenChainLifetime(null), Duration.ofHours(2));
         Assert.assertFalse(config.isAcrRequestAlwaysEssential(null));
         Assert.assertTrue(config.getAdditionalAudiencesForIdToken(null).isEmpty());
         Assert.assertTrue(config.isResolveAttributes(null));
@@ -78,8 +80,38 @@ public class OIDCCoreProtocolConfigurationTest {
 
     @Test
     void testsetRefreshTokenLifetime() {
+        Assert.assertEquals(config.getRefreshTokenTimeout(null), Duration.ofHours(2));
         config.setRefreshTokenLifetime(Duration.ofMillis(100));
-        Assert.assertEquals(config.getRefreshTokenLifetime(null), Duration.ofMillis(100));
+        // the deprecated setter sets the timeout
+        Assert.assertEquals(config.getRefreshTokenTimeout(null), Duration.ofMillis(100));
+    }
+
+    @Test
+    void testsetRefreshTokenLifetimeLookupStrategy() {
+        Assert.assertEquals(config.getRefreshTokenTimeout(null), Duration.ofHours(2));
+        config.setRefreshTokenLifetimeLookupStrategy(prc -> Duration.ofMillis(100));
+        // the deprecated setter function should be used in getter for timeout
+        Assert.assertEquals(config.getRefreshTokenTimeout(null), Duration.ofMillis(100));
+    }
+
+    @Test
+    void testsetRefreshTokenTimeout() {
+        Assert.assertEquals(config.getRefreshTokenTimeout(null), Duration.ofHours(2));
+        config.setRefreshTokenTimeout(Duration.ofMillis(100));
+        Assert.assertEquals(config.getRefreshTokenTimeout(null), Duration.ofMillis(100));
+    }
+
+    @Test
+    void testsetRefreshTokenTimeoutLookupStrategy() {
+        Assert.assertEquals(config.getRefreshTokenTimeout(null), Duration.ofHours(2));
+        config.setRefreshTokenTimeoutLookupStrategy(prc -> Duration.ofMillis(100));
+        Assert.assertEquals(config.getRefreshTokenTimeout(null), Duration.ofMillis(100));
+    }
+
+    @Test
+    void testsetRefreshTokenChainLifetime() {
+        config.setRefreshTokenChainLifetime(Duration.ofMillis(100));
+        Assert.assertEquals(config.getRefreshTokenChainLifetime(null), Duration.ofMillis(100));
     }
 
     @Test

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


More information about the commits mailing list