This is an automated email from the ASF dual-hosted git repository.

mdisabatino pushed a commit to branch 4_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/4_0_X by this push:
     new 144f89be23 [SYNCOPE-1950] Allow configuration of OIDC Token Expiration 
Policy in WA
144f89be23 is described below

commit 144f89be235134a192117c098a84f6b1087edb38
Author: Marco Di Sabatino Di Diodoro <[email protected]>
AuthorDate: Wed Feb 11 12:41:48 2026 +0100

    [SYNCOPE-1950] Allow configuration of OIDC Token Expiration Policy in WA
---
 .../clientapps/ClientAppModalPanelBuilder.java     | 32 ++++++++++
 .../syncope/common/lib/to/OIDCRPClientAppTO.java   | 72 ++++++++++++++++++++++
 .../persistence/api/entity/am/OIDCRPClientApp.java | 23 +++++++
 .../jpa/entity/am/JPAOIDCRPClientApp.java          | 72 ++++++++++++++++++++++
 .../neo4j/entity/am/Neo4jOIDCRPClientApp.java      | 62 +++++++++++++++++++
 .../java/data/ClientAppDataBinderImpl.java         | 13 +++-
 .../org/apache/syncope/fit/AbstractITCase.java     |  7 +++
 .../apache/syncope/fit/core/ClientAppITCase.java   |  3 +
 .../starter/mapping/OIDCRPClientAppTOMapper.java   | 34 ++++++++++
 9 files changed, 317 insertions(+), 1 deletion(-)

diff --git 
a/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppModalPanelBuilder.java
 
b/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppModalPanelBuilder.java
index 440d32d132..7c2e2532b0 100644
--- 
a/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppModalPanelBuilder.java
+++ 
b/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppModalPanelBuilder.java
@@ -465,6 +465,38 @@ public class ClientAppModalPanelBuilder<T extends 
ClientAppTO> extends AbstractM
                                     false);
                     
tokenEndpointAuthenticationMethod.setChoices(List.of(OIDCClientAuthenticationMethod.values()));
                     fields.add(tokenEndpointAuthenticationMethod);
+
+                    AjaxTextFieldPanel accessTokenMaxTimeToLive = new 
AjaxTextFieldPanel(
+                            "field", "accessTokenMaxTimeToLive",
+                            new PropertyModel<>(clientAppTO, 
"accessTokenMaxTimeToLive"), false);
+                    fields.add(accessTokenMaxTimeToLive);
+
+                    AjaxTextFieldPanel accessTokenTimeToKill = new 
AjaxTextFieldPanel(
+                            "field", "accessTokenTimeToKill", new 
PropertyModel<>(clientAppTO, "accessTokenTimeToKill"),
+                            false);
+                    fields.add(accessTokenTimeToKill);
+
+                    AjaxNumberFieldPanel<Long> accessTokenMaxActiveTokens = 
new AjaxNumberFieldPanel.Builder<Long>()
+                            .enableOnChange()
+                            .build("field", "accessTokenMaxActiveTokens", 
Long.class,
+                                    new PropertyModel<>(clientAppTO, 
"accessTokenMaxActiveTokens"));
+                    fields.add(accessTokenMaxActiveTokens);
+
+                    AjaxTextFieldPanel refreshTokenTimeToKill = new 
AjaxTextFieldPanel(
+                            "field", "refreshTokenTimeToKill",
+                            new PropertyModel<>(clientAppTO, 
"refreshTokenTimeToKill"), false);
+                    fields.add(refreshTokenTimeToKill);
+
+                    AjaxNumberFieldPanel<Long> refreshTokenMaxActiveTokens = 
new AjaxNumberFieldPanel.Builder<Long>()
+                            .enableOnChange()
+                            .build("field", "refreshTokenMaxActiveTokens", 
Long.class,
+                                    new PropertyModel<>(clientAppTO, 
"refreshTokenMaxActiveTokens"));
+                    fields.add(refreshTokenMaxActiveTokens);
+
+                    AjaxTextFieldPanel deviceTokenTimeToKill = new 
AjaxTextFieldPanel(
+                            "field", "deviceTokenTimeToKill", new 
PropertyModel<>(clientAppTO, "deviceTokenTimeToKill"),
+                            false);
+                    fields.add(deviceTokenTimeToKill);
                     break;
 
                 case SAML2SP:
diff --git 
a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/OIDCRPClientAppTO.java
 
b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/OIDCRPClientAppTO.java
index eb77daedd7..9e98636352 100644
--- 
a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/OIDCRPClientAppTO.java
+++ 
b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/OIDCRPClientAppTO.java
@@ -84,6 +84,18 @@ public class OIDCRPClientAppTO extends ClientAppTO {
 
     private String jwksUri;
 
+    private String accessTokenMaxTimeToLive;
+
+    private String accessTokenTimeToKill;
+
+    private Long accessTokenMaxActiveTokens;
+
+    private String refreshTokenTimeToKill;
+
+    private Long refreshTokenMaxActiveTokens;
+
+    private String deviceTokenTimeToKill;
+
     private OIDCClientAuthenticationMethod tokenEndpointAuthenticationMethod =
             OIDCClientAuthenticationMethod.client_secret_basic;
 
@@ -283,6 +295,54 @@ public class OIDCRPClientAppTO extends ClientAppTO {
         this.logoutUri = logoutUri;
     }
 
+    public String getAccessTokenMaxTimeToLive() {
+        return accessTokenMaxTimeToLive;
+    }
+
+    public void setAccessTokenMaxTimeToLive(final String 
accessTokenMaxTimeToLive) {
+        this.accessTokenMaxTimeToLive = accessTokenMaxTimeToLive;
+    }
+
+    public String getAccessTokenTimeToKill() {
+        return accessTokenTimeToKill;
+    }
+
+    public void setAccessTokenTimeToKill(final String accessTokenTimeToKill) {
+        this.accessTokenTimeToKill = accessTokenTimeToKill;
+    }
+
+    public Long getAccessTokenMaxActiveTokens() {
+        return accessTokenMaxActiveTokens;
+    }
+
+    public void setAccessTokenMaxActiveTokens(final Long 
accessTokenMaxActiveTokens) {
+        this.accessTokenMaxActiveTokens = accessTokenMaxActiveTokens;
+    }
+
+    public String getRefreshTokenTimeToKill() {
+        return refreshTokenTimeToKill;
+    }
+
+    public void setRefreshTokenTimeToKill(final String refreshTokenTimeToKill) 
{
+        this.refreshTokenTimeToKill = refreshTokenTimeToKill;
+    }
+
+    public Long getRefreshTokenMaxActiveTokens() {
+        return refreshTokenMaxActiveTokens;
+    }
+
+    public void setRefreshTokenMaxActiveTokens(final Long 
refreshTokenMaxActiveTokens) {
+        this.refreshTokenMaxActiveTokens = refreshTokenMaxActiveTokens;
+    }
+
+    public String getDeviceTokenTimeToKill() {
+        return deviceTokenTimeToKill;
+    }
+
+    public void setDeviceTokenTimeToKill(final String deviceTokenTimeToKill) {
+        this.deviceTokenTimeToKill = deviceTokenTimeToKill;
+    }
+
     @Override
     public boolean equals(final Object obj) {
         if (obj == null) {
@@ -321,6 +381,12 @@ public class OIDCRPClientAppTO extends ClientAppTO {
                 .append(this.jwksUri, rhs.jwksUri)
                 .append(this.tokenEndpointAuthenticationMethod, 
rhs.tokenEndpointAuthenticationMethod)
                 .append(this.logoutUri, rhs.logoutUri)
+                .append(this.accessTokenMaxTimeToLive, 
rhs.accessTokenMaxTimeToLive)
+                .append(this.accessTokenTimeToKill, rhs.accessTokenTimeToKill)
+                .append(this.accessTokenMaxActiveTokens, 
rhs.accessTokenMaxActiveTokens)
+                .append(this.refreshTokenTimeToKill, rhs.accessTokenTimeToKill)
+                .append(this.refreshTokenMaxActiveTokens, 
rhs.refreshTokenMaxActiveTokens)
+                .append(this.deviceTokenTimeToKill, rhs.deviceTokenTimeToKill)
                 .isEquals();
     }
 
@@ -352,6 +418,12 @@ public class OIDCRPClientAppTO extends ClientAppTO {
                 .append(jwksUri)
                 .append(tokenEndpointAuthenticationMethod)
                 .append(logoutUri)
+                .append(accessTokenMaxTimeToLive)
+                .append(accessTokenTimeToKill)
+                .append(accessTokenMaxActiveTokens)
+                .append(refreshTokenTimeToKill)
+                .append(refreshTokenMaxActiveTokens)
+                .append(deviceTokenTimeToKill)
                 .toHashCode();
     }
 }
diff --git 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/OIDCRPClientApp.java
 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/OIDCRPClientApp.java
index 6eb3a3b655..0eb2dbda8d 100644
--- 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/OIDCRPClientApp.java
+++ 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/OIDCRPClientApp.java
@@ -118,4 +118,27 @@ public interface OIDCRPClientApp extends ClientApp {
 
     void setLogoutUri(String logoutUri);
 
+    String getDeviceTokenTimeToKill();
+
+    void setDeviceTokenTimeToKill(String deviceTokenTimeToKill);
+
+    Long getRefreshTokenMaxActiveTokens();
+
+    void setRefreshTokenMaxActiveTokens(Long refreshTokenMaxActiveTokens);
+
+    String getRefreshTokenTimeToKill();
+
+    void setRefreshTokenTimeToKill(String refreshTokenTimeToKill);
+
+    Long getAccessTokenMaxActiveTokens();
+
+    void setAccessTokenMaxActiveTokens(Long accessTokenMaxActiveTokens);
+
+    String getAccessTokenTimeToKill();
+
+    void setAccessTokenTimeToKill(String accessTokenTimeToKill);
+
+    String getAccessTokenMaxTimeToLive();
+
+    void setAccessTokenMaxTimeToLive(String accessTokenMaxTimeToLive);
 }
diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPAOIDCRPClientApp.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPAOIDCRPClientApp.java
index 0ced79e62d..b0a368262b 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPAOIDCRPClientApp.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPAOIDCRPClientApp.java
@@ -142,6 +142,18 @@ public class JPAOIDCRPClientApp extends AbstractClientApp 
implements OIDCRPClien
 
     private String logoutUri;
 
+    private String accessTokenMaxTimeToLive;
+
+    private String accessTokenTimeToKill;
+
+    private Long accessTokenMaxActiveTokens;
+
+    private String refreshTokenTimeToKill;
+
+    private Long refreshTokenMaxActiveTokens;
+
+    private String deviceTokenTimeToKill;
+
     @Override
     public Set<String> getRedirectUris() {
         return redirectUrisSet;
@@ -364,6 +376,66 @@ public class JPAOIDCRPClientApp extends AbstractClientApp 
implements OIDCRPClien
         this.logoutUri = logoutUri;
     }
 
+    @Override
+    public String getDeviceTokenTimeToKill() {
+        return deviceTokenTimeToKill;
+    }
+
+    @Override
+    public void setDeviceTokenTimeToKill(final String deviceTokenTimeToKill) {
+        this.deviceTokenTimeToKill = deviceTokenTimeToKill;
+    }
+
+    @Override
+    public Long getRefreshTokenMaxActiveTokens() {
+        return refreshTokenMaxActiveTokens;
+    }
+
+    @Override
+    public void setRefreshTokenMaxActiveTokens(final Long 
refreshTokenMaxActiveTokens) {
+        this.refreshTokenMaxActiveTokens = refreshTokenMaxActiveTokens;
+    }
+
+    @Override
+    public String getRefreshTokenTimeToKill() {
+        return refreshTokenTimeToKill;
+    }
+
+    @Override
+    public void setRefreshTokenTimeToKill(final String refreshTokenTimeToKill) 
{
+        this.refreshTokenTimeToKill = refreshTokenTimeToKill;
+    }
+
+    @Override
+    public Long getAccessTokenMaxActiveTokens() {
+        return accessTokenMaxActiveTokens;
+    }
+
+    @Override
+    public void setAccessTokenMaxActiveTokens(final Long 
accessTokenMaxActiveTokens) {
+        this.accessTokenMaxActiveTokens = accessTokenMaxActiveTokens;
+    }
+
+    @Override
+    public String getAccessTokenTimeToKill() {
+        return accessTokenTimeToKill;
+    }
+
+    @Override
+    public void setAccessTokenTimeToKill(final String accessTokenTimeToKill) {
+        this.accessTokenTimeToKill = accessTokenTimeToKill;
+    }
+
+    @Override
+    public String getAccessTokenMaxTimeToLive() {
+        return accessTokenMaxTimeToLive;
+    }
+
+    @Override
+    public void setAccessTokenMaxTimeToLive(final String 
accessTokenMaxTimeToLive) {
+        this.accessTokenMaxTimeToLive = accessTokenMaxTimeToLive;
+    }
+    
     protected void json2list(final boolean clearFirst) {
         if (clearFirst) {
             getRedirectUris().clear();
diff --git 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/am/Neo4jOIDCRPClientApp.java
 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/am/Neo4jOIDCRPClientApp.java
index 2e6d41b6ce..cb959011a0 100644
--- 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/am/Neo4jOIDCRPClientApp.java
+++ 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/am/Neo4jOIDCRPClientApp.java
@@ -119,6 +119,19 @@ public class Neo4jOIDCRPClientApp extends 
AbstractClientApp implements OIDCRPCli
 
     private String logoutUri;
 
+
+    private String accessTokenMaxTimeToLive;
+
+    private String accessTokenTimeToKill;
+
+    private Long accessTokenMaxActiveTokens;
+
+    private String refreshTokenTimeToKill;
+
+    private Long refreshTokenMaxActiveTokens;
+
+    private String deviceTokenTimeToKill;
+
     @Override
     public Set<String> getRedirectUris() {
         return redirectUrisSet;
@@ -341,6 +354,55 @@ public class Neo4jOIDCRPClientApp extends 
AbstractClientApp implements OIDCRPCli
         this.logoutUri = logoutUri;
     }
 
+
+    public String getDeviceTokenTimeToKill() {
+        return deviceTokenTimeToKill;
+    }
+
+    public void setDeviceTokenTimeToKill(final String deviceTokenTimeToKill) {
+        this.deviceTokenTimeToKill = deviceTokenTimeToKill;
+    }
+
+    public Long getRefreshTokenMaxActiveTokens() {
+        return refreshTokenMaxActiveTokens;
+    }
+
+    public void setRefreshTokenMaxActiveTokens(final Long 
refreshTokenMaxActiveTokens) {
+        this.refreshTokenMaxActiveTokens = refreshTokenMaxActiveTokens;
+    }
+
+    public String getRefreshTokenTimeToKill() {
+        return refreshTokenTimeToKill;
+    }
+
+    public void setRefreshTokenTimeToKill(final String refreshTokenTimeToKill) 
{
+        this.refreshTokenTimeToKill = refreshTokenTimeToKill;
+    }
+
+    public Long getAccessTokenMaxActiveTokens() {
+        return accessTokenMaxActiveTokens;
+    }
+
+    public void setAccessTokenMaxActiveTokens(final Long 
accessTokenMaxActiveTokens) {
+        this.accessTokenMaxActiveTokens = accessTokenMaxActiveTokens;
+    }
+
+    public String getAccessTokenTimeToKill() {
+        return accessTokenTimeToKill;
+    }
+
+    public void setAccessTokenTimeToKill(final String accessTokenTimeToKill) {
+        this.accessTokenTimeToKill = accessTokenTimeToKill;
+    }
+
+    public String getAccessTokenMaxTimeToLive() {
+        return accessTokenMaxTimeToLive;
+    }
+
+    public void setAccessTokenMaxTimeToLive(final String 
accessTokenMaxTimeToLive) {
+        this.accessTokenMaxTimeToLive = accessTokenMaxTimeToLive;
+    }
+    
     protected void json2list(final boolean clearFirst) {
         if (clearFirst) {
             getRedirectUris().clear();
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ClientAppDataBinderImpl.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ClientAppDataBinderImpl.java
index 7eed004751..5abdc08768 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ClientAppDataBinderImpl.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ClientAppDataBinderImpl.java
@@ -257,6 +257,12 @@ public class ClientAppDataBinderImpl implements 
ClientAppDataBinder {
         clientApp.setJwks(clientAppTO.getJwks());
         clientApp.setJwksUri(clientAppTO.getJwksUri());
         
clientApp.setTokenEndpointAuthenticationMethod(clientAppTO.getTokenEndpointAuthenticationMethod());
+        
clientApp.setAccessTokenMaxActiveTokens(clientAppTO.getAccessTokenMaxActiveTokens());
+        
clientApp.setAccessTokenMaxTimeToLive(clientAppTO.getAccessTokenMaxTimeToLive());
+        
clientApp.setAccessTokenTimeToKill(clientAppTO.getAccessTokenTimeToKill());
+        
clientApp.setRefreshTokenMaxActiveTokens(clientAppTO.getRefreshTokenMaxActiveTokens());
+        
clientApp.setRefreshTokenTimeToKill(clientAppTO.getRefreshTokenTimeToKill());
+        
clientApp.setDeviceTokenTimeToKill(clientAppTO.getDeviceTokenTimeToKill());
     }
 
     protected OIDCRPClientAppTO getOIDCClientAppTO(final OIDCRPClientApp 
clientApp) {
@@ -289,7 +295,12 @@ public class ClientAppDataBinderImpl implements 
ClientAppDataBinder {
         clientAppTO.setJwks(clientApp.getJwks());
         clientAppTO.setJwksUri(clientApp.getJwksUri());
         
clientAppTO.setTokenEndpointAuthenticationMethod(clientApp.getTokenEndpointAuthenticationMethod());
-
+        
clientAppTO.setAccessTokenMaxActiveTokens(clientApp.getAccessTokenMaxActiveTokens());
+        
clientAppTO.setAccessTokenMaxTimeToLive(clientApp.getAccessTokenMaxTimeToLive());
+        
clientAppTO.setAccessTokenTimeToKill(clientApp.getAccessTokenTimeToKill());
+        
clientAppTO.setRefreshTokenTimeToKill(clientApp.getRefreshTokenTimeToKill());
+        
clientAppTO.setRefreshTokenMaxActiveTokens(clientApp.getRefreshTokenMaxActiveTokens());
+        
clientAppTO.setDeviceTokenTimeToKill(clientApp.getDeviceTokenTimeToKill());
         return clientAppTO;
     }
 
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
index b06da9f219..297bb64e5c 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
@@ -977,6 +977,13 @@ public abstract class AbstractITCase {
 
         oidcrpTO.setAuthPolicy(authPolicyTO.getKey());
         oidcrpTO.setAccessPolicy(accessPolicyTO.getKey());
+        
+        oidcrpTO.setAccessTokenMaxActiveTokens(0L);
+        oidcrpTO.setAccessTokenMaxTimeToLive("PT8H");
+        oidcrpTO.setAccessTokenTimeToKill("PT2H");
+        oidcrpTO.setRefreshTokenMaxActiveTokens(0L);
+        oidcrpTO.setRefreshTokenTimeToKill("P14D");
+        oidcrpTO.setDeviceTokenTimeToKill("PT5M");
 
         return oidcrpTO;
     }
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ClientAppITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ClientAppITCase.java
index 72434fe413..8c15d891af 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ClientAppITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ClientAppITCase.java
@@ -121,6 +121,7 @@ public class ClientAppITCase extends AbstractITCase {
         assertFalse(found.getSupportedResponseTypes().isEmpty());
         assertNotNull(found.getAccessPolicy());
         assertNotNull(found.getAuthPolicy());
+        assertNotNull(found.getAccessTokenMaxTimeToLive());
     }
 
     @Test
@@ -147,6 +148,7 @@ public class ClientAppITCase extends AbstractITCase {
 
         oidcrpTO.setClientId("newClientId");
         oidcrpTO.setAccessPolicy(accessPolicyTO.getKey());
+        oidcrpTO.setDeviceTokenTimeToKill("PT6M");
 
         CLIENT_APP_SERVICE.update(ClientAppType.OIDCRP, oidcrpTO);
         OIDCRPClientAppTO updated = 
CLIENT_APP_SERVICE.read(ClientAppType.OIDCRP, oidcrpTO.getKey());
@@ -154,6 +156,7 @@ public class ClientAppITCase extends AbstractITCase {
         assertNotNull(updated);
         assertEquals("newClientId", updated.getClientId());
         assertNotNull(updated.getAccessPolicy());
+        assertEquals("PT6M", updated.getDeviceTokenTimeToKill());
     }
 
     @Test
diff --git 
a/wa/starter/src/main/java/org/apache/syncope/wa/starter/mapping/OIDCRPClientAppTOMapper.java
 
b/wa/starter/src/main/java/org/apache/syncope/wa/starter/mapping/OIDCRPClientAppTOMapper.java
index 0f5e528c0e..2862feb0d5 100644
--- 
a/wa/starter/src/main/java/org/apache/syncope/wa/starter/mapping/OIDCRPClientAppTOMapper.java
+++ 
b/wa/starter/src/main/java/org/apache/syncope/wa/starter/mapping/OIDCRPClientAppTOMapper.java
@@ -43,6 +43,9 @@ import 
org.apereo.cas.services.RegisteredServiceProxyGrantingTicketExpirationPol
 import org.apereo.cas.services.RegisteredServiceProxyTicketExpirationPolicy;
 import org.apereo.cas.services.RegisteredServiceServiceTicketExpirationPolicy;
 import 
org.apereo.cas.services.RegisteredServiceTicketGrantingTicketExpirationPolicy;
+import 
org.apereo.cas.support.oauth.services.DefaultRegisteredServiceOAuthAccessTokenExpirationPolicy;
+import 
org.apereo.cas.support.oauth.services.DefaultRegisteredServiceOAuthDeviceTokenExpirationPolicy;
+import 
org.apereo.cas.support.oauth.services.DefaultRegisteredServiceOAuthRefreshTokenExpirationPolicy;
 
 public class OIDCRPClientAppTOMapper extends AbstractClientAppMapper {
 
@@ -129,6 +132,37 @@ public class OIDCRPClientAppTOMapper extends 
AbstractClientAppMapper {
         setPolicies(service, authPolicy, mfaPolicy, accessStrategy, 
attributeReleasePolicy,
                 tgtExpirationPolicy, stExpirationPolicy, 
tgtProxyExpirationPolicy, stProxyExpirationPolicy);
 
+        if (rp.getAccessTokenMaxTimeToLive() != null
+                || rp.getAccessTokenTimeToKill() != null
+                || rp.getAccessTokenMaxActiveTokens() != null) {
+            DefaultRegisteredServiceOAuthAccessTokenExpirationPolicy 
accessTokenExpirationPolicy =
+                    new 
DefaultRegisteredServiceOAuthAccessTokenExpirationPolicy();
+            Optional.ofNullable(rp.getAccessTokenMaxTimeToLive())
+                    .ifPresent(accessTokenExpirationPolicy::setMaxTimeToLive);
+            Optional.ofNullable(rp.getAccessTokenTimeToKill())
+                    .ifPresent(accessTokenExpirationPolicy::setTimeToKill);
+            Optional.ofNullable(rp.getAccessTokenMaxActiveTokens())
+                    
.ifPresent(accessTokenExpirationPolicy::setMaxActiveTokens);
+            
service.setAccessTokenExpirationPolicy(accessTokenExpirationPolicy);
+        }
+
+        if (rp.getRefreshTokenTimeToKill() != null || 
rp.getRefreshTokenMaxActiveTokens() != null) {
+            DefaultRegisteredServiceOAuthRefreshTokenExpirationPolicy 
refreshTokenExpirationPolicy =
+                    new 
DefaultRegisteredServiceOAuthRefreshTokenExpirationPolicy();
+            Optional.ofNullable(rp.getRefreshTokenTimeToKill())
+                    .ifPresent(refreshTokenExpirationPolicy::setTimeToKill);
+            Optional.ofNullable(rp.getRefreshTokenMaxActiveTokens())
+                    
.ifPresent(refreshTokenExpirationPolicy::setMaxActiveTokens);
+            
service.setRefreshTokenExpirationPolicy(refreshTokenExpirationPolicy);
+        }
+
+        if (rp.getDeviceTokenTimeToKill() != null) {
+            DefaultRegisteredServiceOAuthDeviceTokenExpirationPolicy 
deviceTokenExpirationPolicy =
+                    new 
DefaultRegisteredServiceOAuthDeviceTokenExpirationPolicy();
+            Optional.ofNullable(rp.getAccessTokenTimeToKill())
+                    .ifPresent(deviceTokenExpirationPolicy::setTimeToKill);
+            
service.setDeviceTokenExpirationPolicy(deviceTokenExpirationPolicy);
+        }
         return service;
     }
 }

Reply via email to