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

quantranhong1999 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 9ac7b9f25862f1acc09d9a0d4e32b175523ecdf9
Author: Quan Tran <[email protected]>
AuthorDate: Fri Jul 3 15:07:00 2026 +0700

    JAMES-4195 Relocate JMAP OIDC cache modules
    
    Shared OIDC token cache contracts and model now live in `data-api`, the
    Caffeine implementation lives in `data-memory`, and the Redis implementation
    lives in `data-redis`. Keep `server/protocols/jmap` focused on JMAP
    authentication/configuration and move endpoint-backed token resolution to
    `server/protocols/jwt`.
---
 pom.xml                                            | 10 +++++-----
 server/container/guice/pom.xml                     | 10 +++++-----
 .../container/guice/protocols/jmap-redis/pom.xml   |  8 ++++----
 .../redis/RedisOidcTokenCacheKeyPrefixModule.java  |  2 ++
 .../jmap/oidc/redis/RedisOidcTokenCacheModule.java | 10 +++++++---
 .../jmap/oidc/CaffeineOidcTokenCacheModule.java    |  3 +++
 .../org/apache/james/jmap/oidc/JMAPOidcModule.java | 10 ++++++++++
 .../src/main/java/org/apache/james}/oidc/Aud.java  |  2 +-
 .../org/apache/james}/oidc/OidcTokenCache.java     |  2 +-
 .../james}/oidc/OidcTokenCacheConfiguration.java   |  2 +-
 .../src/main/java/org/apache/james}/oidc/Sid.java  |  2 +-
 .../main/java/org/apache/james}/oidc/Token.java    |  2 +-
 .../java/org/apache/james}/oidc/TokenInfo.java     |  2 +-
 .../org/apache/james}/oidc/TokenInfoResolver.java  |  2 +-
 .../apache/james}/oidc/OidcTokenCacheContract.java |  2 +-
 server/data/data-memory/pom.xml                    |  8 ++++++++
 .../james/oidc/memory}/CaffeineOidcTokenCache.java |  8 +++++++-
 .../oidc/memory}/CaffeineOidcTokenCacheTest.java   |  5 ++++-
 .../jmap-redis => data/data-redis}/pom.xml         | 20 ++++++++++++--------
 .../james}/oidc/redis/RedisOidcTokenCache.java     | 16 ++++++++--------
 .../redis/RedisOidcTokenCacheConfiguration.java    |  2 +-
 .../oidc/redis/RedisOidcTokenCacheKeyPrefix.java   |  2 +-
 .../james}/oidc/redis/RedisTokenCacheCommands.java |  2 +-
 .../oidc/redis/RedisClusterOidcTokenCacheTest.java |  2 +-
 .../RedisOidcTokenCacheConfigurationTest.java      |  2 +-
 .../oidc/redis/RedisOidcTokenCacheContract.java    | 12 ++++++------
 .../redis/RedisSentinelOidcTokenCacheTest.java     |  2 +-
 .../redis/RedisStandaloneOidcTokenCacheTest.java   |  2 +-
 server/pom.xml                                     |  2 +-
 .../jmap-rfc-8621-integration-tests-common/pom.xml |  4 ++++
 .../contract/OidcAuthenticationContract.java       |  2 +-
 server/protocols/jmap/pom.xml                      |  8 --------
 .../jmap/http/OidcAuthenticationStrategy.java      |  8 ++++----
 .../james/jmap/oidc/JMAPOidcConfiguration.java     |  1 +
 .../jmap/http/OidcAuthenticationStrategyTest.java  |  2 +-
 server/protocols/jwt/pom.xml                       | 12 ++++++++++++
 .../james/jwt}/oidc/OidcEndpointsInfoResolver.java | 22 ++++++++++++++--------
 .../webadmin/oidc/OidcBackchannelLogoutRoutes.java |  4 ++--
 .../oidc/OidcBackchannelLogoutRoutesTest.java      |  4 ++--
 39 files changed, 138 insertions(+), 83 deletions(-)

diff --git a/pom.xml b/pom.xml
index 310f3af42e..fd8c390a37 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1470,6 +1470,11 @@
                 <version>${project.version}</version>
                 <type>test-jar</type>
             </dependency>
+            <dependency>
+                <groupId>${james.groupId}</groupId>
+                <artifactId>james-server-data-redis</artifactId>
+                <version>${project.version}</version>
+            </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
                 <artifactId>james-server-deleted-messages-vault</artifactId>
@@ -1640,11 +1645,6 @@
                 <artifactId>james-server-jmap</artifactId>
                 <version>${project.version}</version>
             </dependency>
-            <dependency>
-                <groupId>${james.groupId}</groupId>
-                <artifactId>james-server-jmap-redis</artifactId>
-                <version>${project.version}</version>
-            </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
                 <artifactId>james-server-jmap-rfc-8621</artifactId>
diff --git a/server/container/guice/pom.xml b/server/container/guice/pom.xml
index aa1bed9826..ca176f2a53 100644
--- a/server/container/guice/pom.xml
+++ b/server/container/guice/pom.xml
@@ -99,6 +99,11 @@
                 <artifactId>data-cassandra</artifactId>
                 <version>${project.version}</version>
             </dependency>
+            <dependency>
+                <groupId>${james.groupId}</groupId>
+                <artifactId>james-server-data-redis</artifactId>
+                <version>${project.version}</version>
+            </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
                 <artifactId>james-server-guice-cassandra</artifactId>
@@ -262,11 +267,6 @@
                 
<artifactId>james-server-guice-webadmin-rabbitmq-mailqueue</artifactId>
                 <version>${project.version}</version>
             </dependency>
-            <dependency>
-                <groupId>${james.groupId}</groupId>
-                <artifactId>james-server-jmap-redis</artifactId>
-                <version>${project.version}</version>
-            </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
                 <artifactId>james-server-jmap-rfc-8621</artifactId>
diff --git a/server/container/guice/protocols/jmap-redis/pom.xml 
b/server/container/guice/protocols/jmap-redis/pom.xml
index 600ee45f0a..98eba576fe 100644
--- a/server/container/guice/protocols/jmap-redis/pom.xml
+++ b/server/container/guice/protocols/jmap-redis/pom.xml
@@ -38,19 +38,19 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-guice-configuration</artifactId>
+            <artifactId>james-server-data-redis</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-guice-jmap</artifactId>
+            <artifactId>james-server-guice-configuration</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-jmap</artifactId>
+            <artifactId>james-server-guice-jmap</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-jmap-redis</artifactId>
+            <artifactId>james-server-jmap</artifactId>
         </dependency>
         <dependency>
             <groupId>com.google.inject</groupId>
diff --git 
a/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefixModule.java
 
b/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefixModule.java
index 933341bedb..b020ff146e 100644
--- 
a/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefixModule.java
+++ 
b/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefixModule.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.jmap.oidc.redis;
 
+import org.apache.james.oidc.redis.RedisOidcTokenCacheKeyPrefix;
+
 import com.google.inject.AbstractModule;
 
 public class RedisOidcTokenCacheKeyPrefixModule extends AbstractModule {
diff --git 
a/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheModule.java
 
b/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheModule.java
index 35ddfd7473..1c5ebaa8af 100644
--- 
a/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheModule.java
+++ 
b/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheModule.java
@@ -25,9 +25,13 @@ import java.time.Duration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.backends.redis.RedisConfiguration;
 import org.apache.james.backends.redis.RedisReactiveCommandsFactory;
-import org.apache.james.jmap.oidc.OidcTokenCache;
-import org.apache.james.jmap.oidc.OidcTokenCacheConfiguration;
-import org.apache.james.jmap.oidc.TokenInfoResolver;
+import org.apache.james.oidc.OidcTokenCache;
+import org.apache.james.oidc.OidcTokenCacheConfiguration;
+import org.apache.james.oidc.TokenInfoResolver;
+import org.apache.james.oidc.redis.RedisOidcTokenCache;
+import org.apache.james.oidc.redis.RedisOidcTokenCacheConfiguration;
+import org.apache.james.oidc.redis.RedisOidcTokenCacheKeyPrefix;
+import org.apache.james.oidc.redis.RedisTokenCacheCommands;
 import org.apache.james.utils.PropertiesProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheModule.java
 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheModule.java
index 8db97ee87e..6c9006a95c 100644
--- 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheModule.java
+++ 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheModule.java
@@ -19,6 +19,9 @@
 
 package org.apache.james.jmap.oidc;
 
+import org.apache.james.oidc.OidcTokenCache;
+import org.apache.james.oidc.memory.CaffeineOidcTokenCache;
+
 import com.google.inject.AbstractModule;
 import com.google.inject.Scopes;
 
diff --git 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcModule.java
 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcModule.java
index ddf89c8ce8..70bf033027 100644
--- 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcModule.java
+++ 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcModule.java
@@ -25,6 +25,10 @@ import java.util.List;
 
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.jwt.introspection.IntrospectionEndpoint;
+import org.apache.james.jwt.oidc.OidcEndpointsInfoResolver;
+import org.apache.james.oidc.Aud;
+import org.apache.james.oidc.OidcTokenCacheConfiguration;
+import org.apache.james.oidc.TokenInfoResolver;
 import org.apache.james.utils.PropertiesProvider;
 
 import com.google.inject.AbstractModule;
@@ -54,6 +58,12 @@ public class JMAPOidcModule extends AbstractModule {
         return configuration.getAud();
     }
 
+    @Provides
+    @Named("oidcClaim")
+    String provideOidcClaim(JMAPOidcConfiguration configuration) {
+        return configuration.getOidcClaim();
+    }
+
     @Provides
     @Singleton
     OidcTokenCacheConfiguration oidcTokenCacheConfiguration(PropertiesProvider 
propertiesProvider) throws ConfigurationException {
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Aud.java 
b/server/data/data-api/src/main/java/org/apache/james/oidc/Aud.java
similarity index 97%
rename from 
server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Aud.java
rename to server/data/data-api/src/main/java/org/apache/james/oidc/Aud.java
index 5037dbb143..f99e985379 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Aud.java
+++ b/server/data/data-api/src/main/java/org/apache/james/oidc/Aud.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc;
+package org.apache.james.oidc;
 
 public record Aud(String value) {
 }
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcTokenCache.java
 b/server/data/data-api/src/main/java/org/apache/james/oidc/OidcTokenCache.java
similarity index 97%
rename from 
server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcTokenCache.java
rename to 
server/data/data-api/src/main/java/org/apache/james/oidc/OidcTokenCache.java
index 84eb7a7150..3fc5501fa9 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcTokenCache.java
+++ 
b/server/data/data-api/src/main/java/org/apache/james/oidc/OidcTokenCache.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc;
+package org.apache.james.oidc;
 
 import reactor.core.publisher.Mono;
 
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcTokenCacheConfiguration.java
 
b/server/data/data-api/src/main/java/org/apache/james/oidc/OidcTokenCacheConfiguration.java
similarity index 98%
rename from 
server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcTokenCacheConfiguration.java
rename to 
server/data/data-api/src/main/java/org/apache/james/oidc/OidcTokenCacheConfiguration.java
index cd69435139..89a2199f34 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcTokenCacheConfiguration.java
+++ 
b/server/data/data-api/src/main/java/org/apache/james/oidc/OidcTokenCacheConfiguration.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc;
+package org.apache.james.oidc;
 
 import java.time.Duration;
 import java.util.Optional;
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Sid.java 
b/server/data/data-api/src/main/java/org/apache/james/oidc/Sid.java
similarity index 97%
rename from 
server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Sid.java
rename to server/data/data-api/src/main/java/org/apache/james/oidc/Sid.java
index 06749a746c..f84387337f 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Sid.java
+++ b/server/data/data-api/src/main/java/org/apache/james/oidc/Sid.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc;
+package org.apache.james.oidc;
 
 public record Sid(String value) {
 }
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Token.java 
b/server/data/data-api/src/main/java/org/apache/james/oidc/Token.java
similarity index 97%
rename from 
server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Token.java
rename to server/data/data-api/src/main/java/org/apache/james/oidc/Token.java
index 548214d0d7..5246ec60df 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Token.java
+++ b/server/data/data-api/src/main/java/org/apache/james/oidc/Token.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc;
+package org.apache.james.oidc;
 
 public record Token(String value) {
 }
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/TokenInfo.java 
b/server/data/data-api/src/main/java/org/apache/james/oidc/TokenInfo.java
similarity index 98%
rename from 
server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/TokenInfo.java
rename to 
server/data/data-api/src/main/java/org/apache/james/oidc/TokenInfo.java
index ad2cb8d855..ebf16c8a31 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/TokenInfo.java
+++ b/server/data/data-api/src/main/java/org/apache/james/oidc/TokenInfo.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc;
+package org.apache.james.oidc;
 
 import java.time.Instant;
 import java.util.List;
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/TokenInfoResolver.java
 
b/server/data/data-api/src/main/java/org/apache/james/oidc/TokenInfoResolver.java
similarity index 97%
rename from 
server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/TokenInfoResolver.java
rename to 
server/data/data-api/src/main/java/org/apache/james/oidc/TokenInfoResolver.java
index ebb885a5b0..bc5c443ec5 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/TokenInfoResolver.java
+++ 
b/server/data/data-api/src/main/java/org/apache/james/oidc/TokenInfoResolver.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc;
+package org.apache.james.oidc;
 
 import java.util.function.Function;
 
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/oidc/OidcTokenCacheContract.java
 
b/server/data/data-api/src/test/java/org/apache/james/oidc/OidcTokenCacheContract.java
similarity index 99%
rename from 
server/protocols/jmap/src/test/java/org/apache/james/jmap/oidc/OidcTokenCacheContract.java
rename to 
server/data/data-api/src/test/java/org/apache/james/oidc/OidcTokenCacheContract.java
index 644592371d..b4ae626411 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/oidc/OidcTokenCacheContract.java
+++ 
b/server/data/data-api/src/test/java/org/apache/james/oidc/OidcTokenCacheContract.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc;
+package org.apache.james.oidc;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
diff --git a/server/data/data-memory/pom.xml b/server/data/data-memory/pom.xml
index 8cfeab029e..62106ba94f 100644
--- a/server/data/data-memory/pom.xml
+++ b/server/data/data-memory/pom.xml
@@ -78,6 +78,14 @@
             <artifactId>testing-base</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.github.ben-manes.caffeine</groupId>
+            <artifactId>caffeine</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
         <dependency>
             <groupId>io.cucumber</groupId>
             <artifactId>cucumber-java</artifactId>
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCache.java
 
b/server/data/data-memory/src/main/java/org/apache/james/oidc/memory/CaffeineOidcTokenCache.java
similarity index 93%
rename from 
server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCache.java
rename to 
server/data/data-memory/src/main/java/org/apache/james/oidc/memory/CaffeineOidcTokenCache.java
index eea435fc69..0e0fcb333f 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCache.java
+++ 
b/server/data/data-memory/src/main/java/org/apache/james/oidc/memory/CaffeineOidcTokenCache.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc;
+package org.apache.james.oidc.memory;
 
 import java.util.List;
 import java.util.Optional;
@@ -25,6 +25,12 @@ import java.util.Optional;
 import jakarta.inject.Inject;
 
 import org.apache.james.core.Username;
+import org.apache.james.oidc.OidcTokenCache;
+import org.apache.james.oidc.OidcTokenCacheConfiguration;
+import org.apache.james.oidc.Sid;
+import org.apache.james.oidc.Token;
+import org.apache.james.oidc.TokenInfo;
+import org.apache.james.oidc.TokenInfoResolver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheTest.java
 
b/server/data/data-memory/src/test/java/org/apache/james/oidc/memory/CaffeineOidcTokenCacheTest.java
similarity index 90%
rename from 
server/protocols/jmap/src/test/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheTest.java
rename to 
server/data/data-memory/src/test/java/org/apache/james/oidc/memory/CaffeineOidcTokenCacheTest.java
index 12d23c6956..80ce83f16a 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheTest.java
+++ 
b/server/data/data-memory/src/test/java/org/apache/james/oidc/memory/CaffeineOidcTokenCacheTest.java
@@ -17,11 +17,14 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc;
+package org.apache.james.oidc.memory;
 
 import java.util.Optional;
 
 import org.apache.james.core.Username;
+import org.apache.james.oidc.OidcTokenCacheConfiguration;
+import org.apache.james.oidc.OidcTokenCacheContract;
+import org.apache.james.oidc.Token;
 import org.junit.jupiter.api.BeforeEach;
 
 public class CaffeineOidcTokenCacheTest extends OidcTokenCacheContract {
diff --git a/server/protocols/jmap-redis/pom.xml 
b/server/data/data-redis/pom.xml
similarity index 88%
rename from server/protocols/jmap-redis/pom.xml
rename to server/data/data-redis/pom.xml
index 002ecae5d2..7f0577dca5 100644
--- a/server/protocols/jmap-redis/pom.xml
+++ b/server/data/data-redis/pom.xml
@@ -26,10 +26,10 @@
         <relativePath>../../pom.xml</relativePath>
     </parent>
 
-    <artifactId>james-server-jmap-redis</artifactId>
+    <artifactId>james-server-data-redis</artifactId>
 
-    <name>Apache James :: Server :: JMAP Redis</name>
-    <description>Redis OIDC cache implementation for JMAP RFC8621</description>
+    <name>Apache James :: Server :: Data :: Redis</name>
+    <description>Redis data implementations for James server</description>
 
     <dependencies>
         <dependency>
@@ -44,18 +44,22 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-guice-common</artifactId>
-            <type>test-jar</type>
+            <artifactId>james-server-core</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-jmap</artifactId>
+            <artifactId>james-server-data-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-data-api</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-jmap</artifactId>
-            <version>${project.version}</version>
+            <artifactId>james-server-guice-common</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git 
a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCache.java
 
b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCache.java
similarity index 95%
rename from 
server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCache.java
rename to 
server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCache.java
index ee740ced0b..a3954ad056 100644
--- 
a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCache.java
+++ 
b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCache.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc.redis;
+package org.apache.james.oidc.redis;
 
 import java.nio.charset.StandardCharsets;
 import java.time.Instant;
@@ -26,13 +26,13 @@ import java.util.Map;
 import java.util.Optional;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.james.jmap.oidc.Aud;
-import org.apache.james.jmap.oidc.OidcTokenCache;
-import org.apache.james.jmap.oidc.OidcTokenCacheConfiguration;
-import org.apache.james.jmap.oidc.Sid;
-import org.apache.james.jmap.oidc.Token;
-import org.apache.james.jmap.oidc.TokenInfo;
-import org.apache.james.jmap.oidc.TokenInfoResolver;
+import org.apache.james.oidc.Aud;
+import org.apache.james.oidc.OidcTokenCache;
+import org.apache.james.oidc.OidcTokenCacheConfiguration;
+import org.apache.james.oidc.Sid;
+import org.apache.james.oidc.Token;
+import org.apache.james.oidc.TokenInfo;
+import org.apache.james.oidc.TokenInfoResolver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git 
a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheConfiguration.java
 
b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCacheConfiguration.java
similarity index 98%
rename from 
server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheConfiguration.java
rename to 
server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCacheConfiguration.java
index f8c91fe30d..6023a6f6fd 100644
--- 
a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheConfiguration.java
+++ 
b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCacheConfiguration.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc.redis;
+package org.apache.james.oidc.redis;
 
 import java.time.Duration;
 import java.util.Optional;
diff --git 
a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefix.java
 
b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCacheKeyPrefix.java
similarity index 97%
rename from 
server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefix.java
rename to 
server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCacheKeyPrefix.java
index 70508d0fd3..bd1a6f28fd 100644
--- 
a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefix.java
+++ 
b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCacheKeyPrefix.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc.redis;
+package org.apache.james.oidc.redis;
 
 public record RedisOidcTokenCacheKeyPrefix(String tokenPrefix, String 
sidPrefix) {
     public static final RedisOidcTokenCacheKeyPrefix JAMES_DEFAULT =
diff --git 
a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisTokenCacheCommands.java
 
b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisTokenCacheCommands.java
similarity index 98%
rename from 
server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisTokenCacheCommands.java
rename to 
server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisTokenCacheCommands.java
index c81c07dcec..427a6d1b54 100644
--- 
a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisTokenCacheCommands.java
+++ 
b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisTokenCacheCommands.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc.redis;
+package org.apache.james.oidc.redis;
 
 import java.time.Duration;
 import java.util.Map;
diff --git 
a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisClusterOidcTokenCacheTest.java
 
b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisClusterOidcTokenCacheTest.java
similarity index 98%
rename from 
server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisClusterOidcTokenCacheTest.java
rename to 
server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisClusterOidcTokenCacheTest.java
index 12ddf6c329..1d71ffa3b2 100644
--- 
a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisClusterOidcTokenCacheTest.java
+++ 
b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisClusterOidcTokenCacheTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc.redis;
+package org.apache.james.oidc.redis;
 
 import org.apache.james.backends.redis.RedisClusterExtension;
 import org.apache.james.backends.redis.RedisConfiguration;
diff --git 
a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheConfigurationTest.java
 
b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisOidcTokenCacheConfigurationTest.java
similarity index 98%
rename from 
server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheConfigurationTest.java
rename to 
server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisOidcTokenCacheConfigurationTest.java
index 8b26c89c67..df1bf3e78f 100644
--- 
a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheConfigurationTest.java
+++ 
b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisOidcTokenCacheConfigurationTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc.redis;
+package org.apache.james.oidc.redis;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
diff --git 
a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheContract.java
 
b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisOidcTokenCacheContract.java
similarity index 93%
rename from 
server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheContract.java
rename to 
server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisOidcTokenCacheContract.java
index e9d08ea6b8..a1b473a668 100644
--- 
a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheContract.java
+++ 
b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisOidcTokenCacheContract.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc.redis;
+package org.apache.james.oidc.redis;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
@@ -30,11 +30,11 @@ import org.apache.james.backends.redis.RedisClientFactory;
 import org.apache.james.backends.redis.RedisConfiguration;
 import org.apache.james.backends.redis.RedisReactiveCommandsFactory;
 import org.apache.james.core.Username;
-import org.apache.james.jmap.oidc.OidcTokenCache;
-import org.apache.james.jmap.oidc.OidcTokenCacheConfiguration;
-import org.apache.james.jmap.oidc.OidcTokenCacheContract;
-import org.apache.james.jmap.oidc.Token;
-import org.apache.james.jmap.oidc.TokenInfo;
+import org.apache.james.oidc.OidcTokenCache;
+import org.apache.james.oidc.OidcTokenCacheConfiguration;
+import org.apache.james.oidc.OidcTokenCacheContract;
+import org.apache.james.oidc.Token;
+import org.apache.james.oidc.TokenInfo;
 import org.apache.james.server.core.filesystem.FileSystemImpl;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git 
a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisSentinelOidcTokenCacheTest.java
 
b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisSentinelOidcTokenCacheTest.java
similarity index 98%
rename from 
server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisSentinelOidcTokenCacheTest.java
rename to 
server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisSentinelOidcTokenCacheTest.java
index 5a63710ef0..235b5586ed 100644
--- 
a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisSentinelOidcTokenCacheTest.java
+++ 
b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisSentinelOidcTokenCacheTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc.redis;
+package org.apache.james.oidc.redis;
 
 import org.apache.james.backends.redis.RedisConfiguration;
 import org.apache.james.backends.redis.RedisSentinelExtension;
diff --git 
a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisStandaloneOidcTokenCacheTest.java
 
b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisStandaloneOidcTokenCacheTest.java
similarity index 98%
rename from 
server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisStandaloneOidcTokenCacheTest.java
rename to 
server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisStandaloneOidcTokenCacheTest.java
index f1e53d214a..97833add66 100644
--- 
a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisStandaloneOidcTokenCacheTest.java
+++ 
b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisStandaloneOidcTokenCacheTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc.redis;
+package org.apache.james.oidc.redis;
 
 import org.apache.james.backends.redis.RedisConfiguration;
 import org.apache.james.backends.redis.RedisExtension;
diff --git a/server/pom.xml b/server/pom.xml
index b7226421a7..2058c9e3fe 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -74,6 +74,7 @@
         <module>data/data-library</module>
         <module>data/data-memory</module>
         <module>data/data-postgres</module>
+        <module>data/data-redis</module>
 
         <module>dns-service/dnsservice-api</module>
         <module>dns-service/dnsservice-dnsjava</module>
@@ -98,7 +99,6 @@
 
         <module>protocols/fetchmail</module>
         <module>protocols/jmap</module>
-        <module>protocols/jmap-redis</module>
         <module>protocols/jmap-rfc-8621</module>
         <module>protocols/jmap-rfc-8621-integration-tests</module>
         <module>protocols/jwt</module>
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/pom.xml
 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/pom.xml
index c0c29faac6..065e513de0 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/pom.xml
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/pom.xml
@@ -38,6 +38,10 @@
             <groupId>${james.groupId}</groupId>
             <artifactId>blob-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-data-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-dnsservice-test</artifactId>
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/OidcAuthenticationContract.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/OidcAuthenticationContract.java
index 61fe32883f..9d94666729 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/OidcAuthenticationContract.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/OidcAuthenticationContract.java
@@ -43,10 +43,10 @@ import java.util.UUID;
 
 import org.apache.james.GuiceJamesServer;
 import org.apache.james.jmap.http.OidcAuthenticationStrategy;
-import org.apache.james.jmap.oidc.Aud;
 import org.apache.james.jmap.oidc.JMAPOidcConfiguration;
 import org.apache.james.jmap.rfc8621.contract.tags.CategoryTags;
 import org.apache.james.jwt.introspection.IntrospectionEndpoint;
+import org.apache.james.oidc.Aud;
 import org.apache.james.user.api.AlreadyExistInUsersRepositoryException;
 import org.apache.james.utils.DataProbeImpl;
 import org.junit.jupiter.api.AfterEach;
diff --git a/server/protocols/jmap/pom.xml b/server/protocols/jmap/pom.xml
index c650ecd765..db1359e3d6 100644
--- a/server/protocols/jmap/pom.xml
+++ b/server/protocols/jmap/pom.xml
@@ -68,14 +68,6 @@
             <artifactId>testing-base</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.github.ben-manes.caffeine</groupId>
-            <artifactId>caffeine</artifactId>
-        </dependency>
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/http/OidcAuthenticationStrategy.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/http/OidcAuthenticationStrategy.java
index cfb88a8747..85315aaf4d 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/http/OidcAuthenticationStrategy.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/http/OidcAuthenticationStrategy.java
@@ -29,14 +29,14 @@ import jakarta.inject.Inject;
 
 import org.apache.james.core.Username;
 import org.apache.james.jmap.exceptions.UnauthorizedException;
-import org.apache.james.jmap.oidc.Aud;
-import org.apache.james.jmap.oidc.OidcTokenCache;
-import org.apache.james.jmap.oidc.Token;
-import org.apache.james.jmap.oidc.TokenInfo;
 import org.apache.james.jwt.introspection.TokenIntrospectionException;
 import org.apache.james.jwt.userinfo.UserInfoCheckException;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.SessionProvider;
+import org.apache.james.oidc.Aud;
+import org.apache.james.oidc.OidcTokenCache;
+import org.apache.james.oidc.Token;
+import org.apache.james.oidc.TokenInfo;
 
 import com.google.common.collect.ImmutableMap;
 
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcConfiguration.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcConfiguration.java
index 5e9ff5d039..4d95e0416c 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcConfiguration.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcConfiguration.java
@@ -29,6 +29,7 @@ import org.apache.commons.configuration2.Configuration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.jmap.http.OidcAuthenticationStrategy;
 import org.apache.james.jwt.introspection.IntrospectionEndpoint;
+import org.apache.james.oidc.Aud;
 import org.apache.james.utils.PropertiesProvider;
 
 import com.google.common.collect.ImmutableList;
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/http/OidcAuthenticationStrategyTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/http/OidcAuthenticationStrategyTest.java
index 847842bb1b..e5836da34b 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/http/OidcAuthenticationStrategyTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/http/OidcAuthenticationStrategyTest.java
@@ -25,8 +25,8 @@ import static org.mockito.Mockito.mock;
 import java.time.Clock;
 import java.util.List;
 
-import org.apache.james.jmap.oidc.OidcTokenCache;
 import org.apache.james.mailbox.SessionProvider;
+import org.apache.james.oidc.OidcTokenCache;
 import org.junit.jupiter.api.Test;
 
 import com.google.common.collect.ImmutableMap;
diff --git a/server/protocols/jwt/pom.xml b/server/protocols/jwt/pom.xml
index e014a01d60..bf9a8eb452 100644
--- a/server/protocols/jwt/pom.xml
+++ b/server/protocols/jwt/pom.xml
@@ -36,6 +36,18 @@
             <groupId>${james.groupId}</groupId>
             <artifactId>james-core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-data-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-util</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>metrics-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>testing-base</artifactId>
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcEndpointsInfoResolver.java
 
b/server/protocols/jwt/src/main/java/org/apache/james/jwt/oidc/OidcEndpointsInfoResolver.java
similarity index 85%
rename from 
server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcEndpointsInfoResolver.java
rename to 
server/protocols/jwt/src/main/java/org/apache/james/jwt/oidc/OidcEndpointsInfoResolver.java
index 0ac50e101a..fe539686a0 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcEndpointsInfoResolver.java
+++ 
b/server/protocols/jwt/src/main/java/org/apache/james/jwt/oidc/OidcEndpointsInfoResolver.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.oidc;
+package org.apache.james.jwt.oidc;
 
 import java.net.URL;
 import java.time.Instant;
@@ -28,12 +28,18 @@ import jakarta.inject.Inject;
 import jakarta.inject.Named;
 
 import org.apache.james.core.Username;
-import org.apache.james.jmap.exceptions.UnauthorizedException;
 import org.apache.james.jwt.DefaultCheckTokenClient;
 import org.apache.james.jwt.introspection.IntrospectionEndpoint;
+import org.apache.james.jwt.introspection.TokenIntrospectionException;
 import org.apache.james.jwt.introspection.TokenIntrospectionResponse;
+import org.apache.james.jwt.userinfo.UserInfoCheckException;
 import org.apache.james.jwt.userinfo.UserinfoResponse;
 import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.oidc.Aud;
+import org.apache.james.oidc.Sid;
+import org.apache.james.oidc.Token;
+import org.apache.james.oidc.TokenInfo;
+import org.apache.james.oidc.TokenInfoResolver;
 import org.apache.james.util.streams.Iterators;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -48,19 +54,19 @@ public class OidcEndpointsInfoResolver implements 
TokenInfoResolver {
     private final MetricFactory metricFactory;
     private final URL userInfoURL;
     private final IntrospectionEndpoint introspectionEndpoint;
-    private final JMAPOidcConfiguration configuration;
+    private final String oidcClaim;
 
     @Inject
     public OidcEndpointsInfoResolver(DefaultCheckTokenClient checkTokenClient,
                                      MetricFactory metricFactory,
                                      @Named("userInfo") URL userInfoURL,
                                      IntrospectionEndpoint 
introspectionEndpoint,
-                                     JMAPOidcConfiguration configuration) {
+                                     @Named("oidcClaim") String oidcClaim) {
         this.checkTokenClient = checkTokenClient;
         this.metricFactory = metricFactory;
         this.userInfoURL = userInfoURL;
         this.introspectionEndpoint = introspectionEndpoint;
-        this.configuration = configuration;
+        this.oidcClaim = oidcClaim;
     }
 
     @Override
@@ -72,8 +78,8 @@ public class OidcEndpointsInfoResolver implements 
TokenInfoResolver {
                 UserinfoResponse userInfo = tokenInfos.getT1();
                 TokenIntrospectionResponse introspectInfo = tokenInfos.getT2();
 
-                Username sub = 
Username.of(userInfo.claimByPropertyName(configuration.getOidcClaim())
-                    .orElseThrow(() -> new UnauthorizedException("Invalid OIDC 
token: userinfo needs to include " + configuration.getOidcClaim() + " claim")));
+                Username sub = 
Username.of(userInfo.claimByPropertyName(oidcClaim)
+                    .orElseThrow(() -> new UserInfoCheckException("Invalid 
OIDC token: userinfo needs to include " + oidcClaim + " claim")));
 
                 return Mono.just(toTokenInfo(sub, userInfo, introspectInfo));
             });
@@ -84,7 +90,7 @@ public class OidcEndpointsInfoResolver implements 
TokenInfoResolver {
             username.asString(),
             userinfoResponse.claimByPropertyName(SID_PROPERTY).map(Sid::new)
                 .or(() -> 
introspectionResponse.claimByPropertyName(SID_PROPERTY).map(Sid::new)),
-            Instant.ofEpochSecond(introspectionResponse.exp().orElseThrow(() 
-> new UnauthorizedException("Expiration claim ('exp') is required in the 
token"))),
+            Instant.ofEpochSecond(introspectionResponse.exp().orElseThrow(() 
-> new TokenIntrospectionException("Expiration claim ('exp') is required in the 
token"))),
             extractAudience(introspectionResponse));
     }
 
diff --git 
a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutes.java
 
b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutes.java
index 31af7d771a..ecf973c055 100644
--- 
a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutes.java
@@ -27,8 +27,8 @@ import java.util.Optional;
 import jakarta.inject.Inject;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.james.jmap.oidc.OidcTokenCache;
-import org.apache.james.jmap.oidc.Sid;
+import org.apache.james.oidc.OidcTokenCache;
+import org.apache.james.oidc.Sid;
 import org.apache.james.webadmin.Constants;
 import org.apache.james.webadmin.PublicRoutes;
 import org.apache.james.webadmin.utils.JsonTransformer;
diff --git 
a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutesTest.java
 
b/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutesTest.java
index e689d70707..000abcb8e3 100644
--- 
a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutesTest.java
@@ -28,8 +28,8 @@ import static org.mockito.Mockito.verify;
 import java.nio.charset.StandardCharsets;
 import java.util.Base64;
 
-import org.apache.james.jmap.oidc.OidcTokenCache;
-import org.apache.james.jmap.oidc.Sid;
+import org.apache.james.oidc.OidcTokenCache;
+import org.apache.james.oidc.Sid;
 import org.apache.james.webadmin.WebAdminServer;
 import org.apache.james.webadmin.WebAdminUtils;
 import org.apache.james.webadmin.utils.JsonTransformer;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to