From b18962444ca6bac1039a9253385a45c30bc4f692 Mon Sep 17 00:00:00 2001 From: Niklasherrmann21 Date: Thu, 17 Sep 2026 17:00:53 +0200 Subject: [PATCH 1/3] feat: Add java-security-core module with token model, validators and x509 Move the Jakarta-free core of java-security into its own module so that token validation can be used from non-Jakarta environments (e.g. Tomcat 9 / javax.servlet runtimes) and from non-servlet code: - com.sap.cloud.security.token (token model, SecurityContext, TokenExchangeMode) - com.sap.cloud.security.token.validation (+ all validators, JwtValidatorBuilder) - com.sap.cloud.security.x509 - HybridTokenFactory + the TokenFactory ServiceLoader registration (pure Java despite the historical servlet package; required by Token.create()) Sources and tests are moved unchanged (git mv). The new module has no jakarta.servlet and no Spring dependency. --- java-security-core/README.md | 68 ++++++++ java-security-core/pom.xml | 163 ++++++++++++++++++ .../security/servlet/HybridTokenFactory.java | 0 .../cloud/security/token/AbstractToken.java | 0 .../token/DefaultIdTokenExtension.java | 0 .../sap/cloud/security/token/SapIdToken.java | 0 .../cloud/security/token/ScopeConverter.java | 0 .../security/token/TokenExchangeMode.java | 0 .../security/token/XsuaaScopeConverter.java | 0 .../sap/cloud/security/token/XsuaaToken.java | 0 .../token/validation/CombiningValidator.java | 0 .../token/validation/ValidationListener.java | 0 .../token/validation/ValidationResult.java | 0 .../token/validation/ValidationResults.java | 0 .../security/token/validation/Validator.java | 0 .../validation/validators/JsonWebKey.java | 0 .../validators/JsonWebKeyConstants.java | 0 .../validation/validators/JsonWebKeyImpl.java | 0 .../validation/validators/JsonWebKeySet.java | 0 .../validators/JsonWebKeySetFactory.java | 0 .../validators/JwtAudienceValidator.java | 0 .../validators/JwtIssuerValidator.java | 0 .../validators/JwtSignatureAlgorithm.java | 0 .../validators/JwtSignatureValidator.java | 0 .../validators/JwtTimestampValidator.java | 0 .../validators/JwtValidatorBuilder.java | 0 .../validators/JwtX5tValidator.java | 0 .../validation/validators/KeyMaterial.java | 0 .../OAuth2TokenKeyServiceWithCache.java | 0 .../OidcConfigurationServiceWithCache.java | 0 .../SapIdJwtSignatureValidator.java | 0 .../TokenKeyCacheConfiguration.java | 0 .../XsuaaJwtSignatureValidator.java | 0 .../cloud/security/x509/X509Certificate.java | 0 .../com.sap.cloud.security.token.TokenFactory | 0 .../com/sap/cloud/security/TestConstants.java | 0 .../security/token/AbstractTokenTest.java | 0 .../token/DefaultIdTokenExtensionTest.java | 0 .../security/token/MockTokenBuilder.java | 0 .../cloud/security/token/SapIdTokenTest.java | 0 .../security/token/SecurityContextTest.java | 0 .../token/XsuaaScopeConverterTest.java | 0 .../cloud/security/token/XsuaaTokenTest.java | 0 .../validation/CombiningValidatorTest.java | 0 .../token/validation/TokenTestValidator.java | 0 .../validation/ValidationResultsTest.java | 0 .../IdTokenSignatureValidatorTest.java | 0 .../validators/JsonWebKeySetFactoryTest.java | 0 .../validators/JsonWebKeySetTest.java | 0 .../validation/validators/JsonWebKeyTest.java | 0 .../validators/JsonWebKeyTestFactory.java | 0 .../validators/JwtAudienceValidatorTest.java | 0 .../validators/JwtIssuerValidatorTest.java | 0 .../validators/JwtSignatureAlgorithmTest.java | 0 .../validators/JwtTimestampValidatorTest.java | 0 .../validators/JwtValidatorBuilderTest.java | 0 .../validators/JwtX5tValidatorTest.java | 0 .../OAuth2TokenKeyServiceWithCacheTest.java | 0 ...OidcConfigurationServiceWithCacheTest.java | 0 ...IdJwtSignatureValidatorAlgorithmsTest.java | 0 .../SapIdJwtSignatureValidatorTest.java | 0 .../XsaJwtSignatureValidatorTest.java | 0 .../XsuaaJwtSignatureValidatorTest.java | 0 .../security/x509/X509CertificateTest.java | 0 .../security/x509/XfccCertificateTest.java | 0 .../cf-forwarded-client-cert-base64.txt | 1 + .../resources/cf-forwarded-client-cert.txt | 1 + .../test/resources/iasJsonWebTokenKeys.json | 18 ++ .../resources/iasJsonWebTokenKeys_noKid.json | 10 ++ .../src/test/resources/iasOidcTokenRSA256.txt | 1 + .../resources/iasTokenInvalidCnfRSA256.txt | 1 + .../test/resources/iasTokenWithCnfRSA256.txt | 1 + .../src/test/resources/jsonWebTokenKeys.json | 30 ++++ .../org.mockito.plugins.MockMaker | 1 + .../test/resources/simplelogger.properties | 2 + .../test/resources/uaaAccessTokenRSA256.txt | 1 + ...sTokenRSA256_signedWithVerificationKey.txt | 1 + .../resources/xsuaaCCAccessTokenRSA256.txt | 1 + .../resources/xsuaaJwtBearerTokenRSA256.txt | 1 + ...sTokenRSA256_signedWithVerificationKey.txt | 1 + 80 files changed, 302 insertions(+) create mode 100644 java-security-core/README.md create mode 100644 java-security-core/pom.xml rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/servlet/HybridTokenFactory.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/AbstractToken.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/DefaultIdTokenExtension.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/SapIdToken.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/ScopeConverter.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/TokenExchangeMode.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/XsuaaScopeConverter.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/XsuaaToken.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/CombiningValidator.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/ValidationListener.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/ValidationResult.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/ValidationResults.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/Validator.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKey.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyConstants.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyImpl.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySet.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetFactory.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/JwtAudienceValidator.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/JwtIssuerValidator.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/JwtSignatureAlgorithm.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/JwtSignatureValidator.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/JwtTimestampValidator.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/JwtValidatorBuilder.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/JwtX5tValidator.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/KeyMaterial.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/OAuth2TokenKeyServiceWithCache.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/OidcConfigurationServiceWithCache.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidator.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/TokenKeyCacheConfiguration.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/token/validation/validators/XsuaaJwtSignatureValidator.java (100%) rename {java-security => java-security-core}/src/main/java/com/sap/cloud/security/x509/X509Certificate.java (100%) rename {java-security => java-security-core}/src/main/resources/META-INF/services/com.sap.cloud.security.token.TokenFactory (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/TestConstants.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/AbstractTokenTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/DefaultIdTokenExtensionTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/MockTokenBuilder.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/SapIdTokenTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/SecurityContextTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/XsuaaScopeConverterTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/XsuaaTokenTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/CombiningValidatorTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/TokenTestValidator.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/ValidationResultsTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/IdTokenSignatureValidatorTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetFactoryTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyTestFactory.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/JwtAudienceValidatorTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/JwtIssuerValidatorTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/JwtSignatureAlgorithmTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/JwtTimestampValidatorTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/JwtValidatorBuilderTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/JwtX5tValidatorTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/OAuth2TokenKeyServiceWithCacheTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/OidcConfigurationServiceWithCacheTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidatorAlgorithmsTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidatorTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/XsaJwtSignatureValidatorTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/token/validation/validators/XsuaaJwtSignatureValidatorTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/x509/X509CertificateTest.java (100%) rename {java-security => java-security-core}/src/test/java/com/sap/cloud/security/x509/XfccCertificateTest.java (100%) create mode 100644 java-security-core/src/test/resources/cf-forwarded-client-cert-base64.txt create mode 100644 java-security-core/src/test/resources/cf-forwarded-client-cert.txt create mode 100644 java-security-core/src/test/resources/iasJsonWebTokenKeys.json create mode 100644 java-security-core/src/test/resources/iasJsonWebTokenKeys_noKid.json create mode 100644 java-security-core/src/test/resources/iasOidcTokenRSA256.txt create mode 100644 java-security-core/src/test/resources/iasTokenInvalidCnfRSA256.txt create mode 100644 java-security-core/src/test/resources/iasTokenWithCnfRSA256.txt create mode 100644 java-security-core/src/test/resources/jsonWebTokenKeys.json create mode 100644 java-security-core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker create mode 100644 java-security-core/src/test/resources/simplelogger.properties create mode 100644 java-security-core/src/test/resources/uaaAccessTokenRSA256.txt create mode 100644 java-security-core/src/test/resources/xsuaaAccessTokenRSA256_signedWithVerificationKey.txt create mode 100644 java-security-core/src/test/resources/xsuaaCCAccessTokenRSA256.txt create mode 100644 java-security-core/src/test/resources/xsuaaJwtBearerTokenRSA256.txt create mode 100644 java-security-core/src/test/resources/xsuaaXsaAccessTokenRSA256_signedWithVerificationKey.txt diff --git a/java-security-core/README.md b/java-security-core/README.md new file mode 100644 index 0000000000..aa9248114b --- /dev/null +++ b/java-security-core/README.md @@ -0,0 +1,68 @@ +# SAP BTP Java Security Core Client Library + +The core part of the SAP BTP Java Security client library: token model, JWT validation and +X.509 helpers — **without any `jakarta.servlet` or Spring dependency**. + +This module exists so that token validation can be used from non-Jakarta environments +(e.g. Tomcat 9 / `javax.servlet` runtimes) and from non-servlet code (batch jobs, +message-driven components, custom filters). + +## What's in this module + +| Package | Content | +|---|---| +| `com.sap.cloud.security.token` | Token model (`Token`, `XsuaaToken`, `SapIdToken`, `IdTokenExtension`, `ScopeConverter`, `TokenExchangeMode`), thread-local `SecurityContext` token cache | +| `com.sap.cloud.security.token.validation` | `Validator`, `CombiningValidator`, `ValidationResult(s)`, `ValidationListener` | +| `com.sap.cloud.security.token.validation.validators` | `JwtValidatorBuilder` and all JWT validators (signature, issuer, audience, timestamp, `X5t` / proof token, JWKS handling with cache) | +| `com.sap.cloud.security.x509` | X.509 certificate helpers (`X509Certificate`, thumbprints) | +| `com.sap.cloud.security.servlet` | `HybridTokenFactory` only — the `TokenFactory` ServiceLoader registration used by `Token.create()`. Despite the package name it has **no servlet dependency** (historical package, kept for compatibility) | + +The servlet-based token authenticators (`HybridTokenAuthenticator`, `IasTokenAuthenticator`, +`XsuaaTokenAuthenticator`) and the Spring security context adapter +(`com.sap.cloud.security.adapter.spring`) live in the +[`java-security`](../java-security) module, which depends on this module. If you depend on +`java-security` you get everything transitively — no code changes needed. + +## Maven + +```xml + + com.sap.cloud.security + java-security-core + 4.1.2 + +``` + +## Usage + +Token validation without a servlet context: + +```java +// 1. Service configuration (Cloud Foundry VCAP / Kubernetes secrets) or built manually +OAuth2ServiceConfiguration xsuaaConfig = Environments.getCurrent().getXsuaaConfiguration(); + +// 2. Build the validator chain (XSUAA or IAS, with audience/JWKs cache as needed) +Validator validator = JwtValidatorBuilder.getInstance(xsuaaConfig) + .withCacheConfiguration(TokenKeyCacheConfiguration.getInstance(Duration.ofMinutes(30), 100, true)) + .build(); + +// 3. Validate the token from the Authorization header +Token token = Token.create("Bearer "); +ValidationResults results = validator.validate(token); +``` + +This is exactly what `HybridTokenAuthenticator` does internally in the `java-security` +module; with `java-security-core` you drive the same validators directly and extract the +Authorization header yourself from your (javax) servlet request. + +## Requirements + +- Java 17 +- Service configuration via Cloud Foundry (`VCAP_SERVICES`) or Kubernetes/Kyma secrets + (see [`env`](../env) module), or a manually constructed `OAuth2ServiceConfiguration` + +## Supported Identity Services & Algorithms + +See the [java-security README](../java-security) — this module contains the same +validators, so supported identity services (XSUAA, SAP Identity) and token signature +algorithms are identical. diff --git a/java-security-core/pom.xml b/java-security-core/pom.xml new file mode 100644 index 0000000000..fdb8191350 --- /dev/null +++ b/java-security-core/pom.xml @@ -0,0 +1,163 @@ + + + + + 4.0.0 + + + com.sap.cloud.security.xsuaa + parent + 4.1.2 + + + com.sap.cloud.security + java-security-core + java-security-core + jar + + https://github.com/SAP/cloud-security-xsuaa-integration + java security core library (tokens and validators) without jakarta.servlet or Spring dependencies + + + SAP SE + https://www.sap.com + + + + + The Apache Software License, Version 2.0 + https://www.apache.org/licenses/LICENSE-2.0.txt + + + + + + Identity Service Development + xsuaa-development@sap.com + SAP SE + https://www.sap.com + + + + + scm:git:git://github.com/SAP/cloud-security-xsuaa-integration.git + scm:git:ssh//github.com/SAP/cloud-security-xsuaa-integration.git + https://github.com/SAP/cloud-security-xsuaa-integration + + + + + com.sap.cloud.security + java-api + ${project.version} + + + com.sap.cloud.security + env + ${project.version} + + + commons-io + commons-io + compile + ${commons.io.version} + + + jakarta.annotation + jakarta.annotation-api + provided + + + + + com.sap.cloud.security.xsuaa + token-client + ${project.version} + compile + + + org.junit.jupiter + junit-jupiter-engine + test + ${junit-jupiter.version} + + + org.junit.jupiter + junit-jupiter-params + test + ${junit-jupiter.version} + + + org.mockito + mockito-core + test + ${mockito.version} + + + org.mockito + mockito-junit-jupiter + test + + + org.assertj + assertj-core + test + ${assertj.version} + + + ch.qos.logback + logback-classic + test + 1.5.13 + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-source-plugin + ${maven.source.plugin.version} + + + attach-sources + + jar-no-fork + + + + + + org.jacoco + jacoco-maven-plugin + + + org.apache.maven.plugins + maven-pmd-plugin + + + com.github.spotbugs + spotbugs-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + + + diff --git a/java-security/src/main/java/com/sap/cloud/security/servlet/HybridTokenFactory.java b/java-security-core/src/main/java/com/sap/cloud/security/servlet/HybridTokenFactory.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/servlet/HybridTokenFactory.java rename to java-security-core/src/main/java/com/sap/cloud/security/servlet/HybridTokenFactory.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/AbstractToken.java b/java-security-core/src/main/java/com/sap/cloud/security/token/AbstractToken.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/AbstractToken.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/AbstractToken.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/DefaultIdTokenExtension.java b/java-security-core/src/main/java/com/sap/cloud/security/token/DefaultIdTokenExtension.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/DefaultIdTokenExtension.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/DefaultIdTokenExtension.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/SapIdToken.java b/java-security-core/src/main/java/com/sap/cloud/security/token/SapIdToken.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/SapIdToken.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/SapIdToken.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/ScopeConverter.java b/java-security-core/src/main/java/com/sap/cloud/security/token/ScopeConverter.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/ScopeConverter.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/ScopeConverter.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/TokenExchangeMode.java b/java-security-core/src/main/java/com/sap/cloud/security/token/TokenExchangeMode.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/TokenExchangeMode.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/TokenExchangeMode.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/XsuaaScopeConverter.java b/java-security-core/src/main/java/com/sap/cloud/security/token/XsuaaScopeConverter.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/XsuaaScopeConverter.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/XsuaaScopeConverter.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/XsuaaToken.java b/java-security-core/src/main/java/com/sap/cloud/security/token/XsuaaToken.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/XsuaaToken.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/XsuaaToken.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/CombiningValidator.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/CombiningValidator.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/CombiningValidator.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/CombiningValidator.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/ValidationListener.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/ValidationListener.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/ValidationListener.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/ValidationListener.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/ValidationResult.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/ValidationResult.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/ValidationResult.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/ValidationResult.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/ValidationResults.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/ValidationResults.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/ValidationResults.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/ValidationResults.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/Validator.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/Validator.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/Validator.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/Validator.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKey.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKey.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKey.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKey.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyConstants.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyConstants.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyConstants.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyConstants.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyImpl.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyImpl.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyImpl.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyImpl.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySet.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySet.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySet.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySet.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetFactory.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetFactory.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetFactory.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetFactory.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtAudienceValidator.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtAudienceValidator.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtAudienceValidator.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtAudienceValidator.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtIssuerValidator.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtIssuerValidator.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtIssuerValidator.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtIssuerValidator.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtSignatureAlgorithm.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtSignatureAlgorithm.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtSignatureAlgorithm.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtSignatureAlgorithm.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtSignatureValidator.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtSignatureValidator.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtSignatureValidator.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtSignatureValidator.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtTimestampValidator.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtTimestampValidator.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtTimestampValidator.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtTimestampValidator.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtValidatorBuilder.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtValidatorBuilder.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtValidatorBuilder.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtValidatorBuilder.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtX5tValidator.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtX5tValidator.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/JwtX5tValidator.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/JwtX5tValidator.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/KeyMaterial.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/KeyMaterial.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/KeyMaterial.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/KeyMaterial.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/OAuth2TokenKeyServiceWithCache.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/OAuth2TokenKeyServiceWithCache.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/OAuth2TokenKeyServiceWithCache.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/OAuth2TokenKeyServiceWithCache.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/OidcConfigurationServiceWithCache.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/OidcConfigurationServiceWithCache.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/OidcConfigurationServiceWithCache.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/OidcConfigurationServiceWithCache.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidator.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidator.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidator.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidator.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/TokenKeyCacheConfiguration.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/TokenKeyCacheConfiguration.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/TokenKeyCacheConfiguration.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/TokenKeyCacheConfiguration.java diff --git a/java-security/src/main/java/com/sap/cloud/security/token/validation/validators/XsuaaJwtSignatureValidator.java b/java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/XsuaaJwtSignatureValidator.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/token/validation/validators/XsuaaJwtSignatureValidator.java rename to java-security-core/src/main/java/com/sap/cloud/security/token/validation/validators/XsuaaJwtSignatureValidator.java diff --git a/java-security/src/main/java/com/sap/cloud/security/x509/X509Certificate.java b/java-security-core/src/main/java/com/sap/cloud/security/x509/X509Certificate.java similarity index 100% rename from java-security/src/main/java/com/sap/cloud/security/x509/X509Certificate.java rename to java-security-core/src/main/java/com/sap/cloud/security/x509/X509Certificate.java diff --git a/java-security/src/main/resources/META-INF/services/com.sap.cloud.security.token.TokenFactory b/java-security-core/src/main/resources/META-INF/services/com.sap.cloud.security.token.TokenFactory similarity index 100% rename from java-security/src/main/resources/META-INF/services/com.sap.cloud.security.token.TokenFactory rename to java-security-core/src/main/resources/META-INF/services/com.sap.cloud.security.token.TokenFactory diff --git a/java-security/src/test/java/com/sap/cloud/security/TestConstants.java b/java-security-core/src/test/java/com/sap/cloud/security/TestConstants.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/TestConstants.java rename to java-security-core/src/test/java/com/sap/cloud/security/TestConstants.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/AbstractTokenTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/AbstractTokenTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/AbstractTokenTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/AbstractTokenTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/DefaultIdTokenExtensionTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/DefaultIdTokenExtensionTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/DefaultIdTokenExtensionTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/DefaultIdTokenExtensionTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/MockTokenBuilder.java b/java-security-core/src/test/java/com/sap/cloud/security/token/MockTokenBuilder.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/MockTokenBuilder.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/MockTokenBuilder.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/SapIdTokenTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/SapIdTokenTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/SapIdTokenTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/SapIdTokenTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/SecurityContextTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/SecurityContextTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/SecurityContextTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/SecurityContextTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/XsuaaScopeConverterTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/XsuaaScopeConverterTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/XsuaaScopeConverterTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/XsuaaScopeConverterTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/XsuaaTokenTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/XsuaaTokenTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/XsuaaTokenTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/XsuaaTokenTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/CombiningValidatorTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/CombiningValidatorTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/CombiningValidatorTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/CombiningValidatorTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/TokenTestValidator.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/TokenTestValidator.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/TokenTestValidator.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/TokenTestValidator.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/ValidationResultsTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/ValidationResultsTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/ValidationResultsTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/ValidationResultsTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/IdTokenSignatureValidatorTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/IdTokenSignatureValidatorTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/IdTokenSignatureValidatorTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/IdTokenSignatureValidatorTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetFactoryTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetFactoryTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetFactoryTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetFactoryTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeySetTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyTestFactory.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyTestFactory.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyTestFactory.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JsonWebKeyTestFactory.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JwtAudienceValidatorTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JwtAudienceValidatorTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JwtAudienceValidatorTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JwtAudienceValidatorTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JwtIssuerValidatorTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JwtIssuerValidatorTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JwtIssuerValidatorTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JwtIssuerValidatorTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JwtSignatureAlgorithmTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JwtSignatureAlgorithmTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JwtSignatureAlgorithmTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JwtSignatureAlgorithmTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JwtTimestampValidatorTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JwtTimestampValidatorTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JwtTimestampValidatorTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JwtTimestampValidatorTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JwtValidatorBuilderTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JwtValidatorBuilderTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JwtValidatorBuilderTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JwtValidatorBuilderTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JwtX5tValidatorTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JwtX5tValidatorTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/JwtX5tValidatorTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/JwtX5tValidatorTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/OAuth2TokenKeyServiceWithCacheTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/OAuth2TokenKeyServiceWithCacheTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/OAuth2TokenKeyServiceWithCacheTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/OAuth2TokenKeyServiceWithCacheTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/OidcConfigurationServiceWithCacheTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/OidcConfigurationServiceWithCacheTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/OidcConfigurationServiceWithCacheTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/OidcConfigurationServiceWithCacheTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidatorAlgorithmsTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidatorAlgorithmsTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidatorAlgorithmsTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidatorAlgorithmsTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidatorTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidatorTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidatorTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/SapIdJwtSignatureValidatorTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/XsaJwtSignatureValidatorTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/XsaJwtSignatureValidatorTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/XsaJwtSignatureValidatorTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/XsaJwtSignatureValidatorTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/token/validation/validators/XsuaaJwtSignatureValidatorTest.java b/java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/XsuaaJwtSignatureValidatorTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/token/validation/validators/XsuaaJwtSignatureValidatorTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/token/validation/validators/XsuaaJwtSignatureValidatorTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/x509/X509CertificateTest.java b/java-security-core/src/test/java/com/sap/cloud/security/x509/X509CertificateTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/x509/X509CertificateTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/x509/X509CertificateTest.java diff --git a/java-security/src/test/java/com/sap/cloud/security/x509/XfccCertificateTest.java b/java-security-core/src/test/java/com/sap/cloud/security/x509/XfccCertificateTest.java similarity index 100% rename from java-security/src/test/java/com/sap/cloud/security/x509/XfccCertificateTest.java rename to java-security-core/src/test/java/com/sap/cloud/security/x509/XfccCertificateTest.java diff --git a/java-security-core/src/test/resources/cf-forwarded-client-cert-base64.txt b/java-security-core/src/test/resources/cf-forwarded-client-cert-base64.txt new file mode 100644 index 0000000000..55aa9e11ad --- /dev/null +++ b/java-security-core/src/test/resources/cf-forwarded-client-cert-base64.txt @@ -0,0 +1 @@ +MIIGHzCCBAegAwIBAgIQG9beRcjzTikmC1QhzBARdjANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCREUxFDASBgNVBAcMC0VVMTAtQ2FuYXJ5MQ8wDQYDVQQKDAZTQVAgU0UxIzAhBgNVBAsMGlNBUCBDbG91ZCBQbGF0Zm9ybSBDbGllbnRzMSUwIwYDVQQDDBxTQVAgQ2xvdWQgUGxhdGZvcm0gQ2xpZW50IENBMB4XDTIxMDMxMjA3MzMwOVoXDTIxMDQxMTA4MzMwOVowggEEMQswCQYDVQQGEwJERTEPMA0GA1UEChMGU0FQIFNFMSMwIQYDVQQLExpTQVAgQ2xvdWQgUGxhdGZvcm0gQ2xpZW50czEPMA0GA1UECxMGQ2FuYXJ5MS0wKwYDVQQLEyQ4ZTFhZmZiMi02MmExLTQzY2MtYTY4Ny0yYmE3NWU0YjNkODQxKzApBgNVBAcTImFveGsyYWRkaC5hY2NvdW50czQwMC5vbmRlbWFuZC5jb20xUjBQBgNVBAMTSWJkY2QzMDBjLWIyMDItNGE3YS1iYjk1LTJhN2U2ZDE1ZmU0Ny8yYjU4NTQwNS1kMzkxLTQ5ODYtYjc2ZC1iNGYyNDY4NWYzYzgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIHzklky3oEib0ovw27WIIyvjkAPQtCYmShS2uQzHsj7Nn9Zp9EPQL2mjYxS2xNj/HXAsbxr6jk+lLrzvdYUNtlQ1XnHIZSBhPyRtQDw1BGHFd38Be70D6rif5s+vDUApvDuOYpLgDBFVgzr25F+47t83lcyWQ1wrKj4wo+aJt5rZrFUAGQCjOqHvccLK8YLmE0p7F444I0CCGxxXg4yQshNFjb3V2Bg+G/gXSYC3gLHX3SPYBhEyM8mm9HoUZ67JEkfM+sPT7OhFL7sLQe2jQ3MK4Z3DgeWLKAxnxLRRdho8sm29fdnt4d8eWbw7N8A2dHkASYvRk2I/tVoVaoAfrAgMBAAGjggEMMIIBCDAJBgNVHRMEAjAAMB8GA1UdIwQYMBaAFMwghFuHFYs3+X6Hsck+w2+VBG6RMB0GA1UdDgQWBBRqE7s38FCAhklB5+Cskt/xL0JaxjAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwgZUGA1UdHwSBjTCBijCBh6CBhKCBgYZ/aHR0cDovL3NhcC1jbG91ZC1wbGF0Zm9ybS1jbGllbnQtY2EtZXUxMC1jYW5hcnktY3Jscy5zMy5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbS9jcmwvZjhhYmU1NGUtMTk1MS00NzBlLWFlMmQtZGU0MGMxNjMzNDFjLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAMwpK54htes+cuSB/iXZRe9bcNpELl7c8eVozEEa5BN1AmFHdEwFNS9M55Y5fHobBGxhOGjAy6UlrbHqV1Wo2d5LxGIF1a1hs7xPbP1GU+moCVnMH60w8d7kPcL7kb5y/RITk7NDgxEhcUC6TrVEiQtfkbw4i3rRyP8Yf6x8QuNwr6c2Zf7yrmFWlFKBrjMMN4dJ+AVKIJyFqPlbdbbBsJegtgo2KqYV8cXCzXMLRhBDkvvHx7Hoz94or6PZ7SPw8bKwwKrAP6/+6Z81q/WKGZwrmYkGi+aji0ocm6n8RyVFQP+wnBJPzn0qD3RNj0afhzvMproRr9O6WJ+tYFhQ2Lnx27+jNP33KBDWLc1XcUanyVtt/pJmbDtzTGD9LDhARX2+a0MciVZcC5WLV4zr9EaGT+a0NrlA1VjxjVTDcXwB3T2KnlskM6aEGodoWGPgfvpaq5IX+pfb/aoeTR3EcXHl8E8WR0aPbpDi8GWGCkqovGDbisnCKJurHRVOx8YE+69tX2qJAuevUENQfUovEWUYtA8UufTpu8TizXxTlt1/X69AdUgnFqLmyNkdd4g7NJoc7A3zjJXin5jwM6a8yjwxvco0fTlqobzngeJhwckcSkR3QvYlVl61ErxTdEhBlH5q1fsQ88tTwZ+x/RKApN80koCrqkj8ubeXc/fDQhj0= \ No newline at end of file diff --git a/java-security-core/src/test/resources/cf-forwarded-client-cert.txt b/java-security-core/src/test/resources/cf-forwarded-client-cert.txt new file mode 100644 index 0000000000..55aa9e11ad --- /dev/null +++ b/java-security-core/src/test/resources/cf-forwarded-client-cert.txt @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/java-security-core/src/test/resources/iasJsonWebTokenKeys.json b/java-security-core/src/test/resources/iasJsonWebTokenKeys.json new file mode 100644 index 0000000000..b627fab5cc --- /dev/null +++ b/java-security-core/src/test/resources/iasJsonWebTokenKeys.json @@ -0,0 +1,18 @@ +{ + "keys": [ + { + "kty": "RSA", + "kid": "default-kid-ias", + "e": "AQAB", + "use": "sig", + "n": "AJtUGmczI7RHx3Ypqxz9_9mK_tc-vOXojlJcMm0VRvYvMLIDlIfj1BrkC_IYLpS2Vl1OTG8AS0xAgBDEG3EUzVU6JZKuIuuxD-iXrBySBQA2ytTYtCrjHD7osji7wyogxDJ2BtVz9191gjX7AlU_WKFPpViK2a_2bCL0K4vI3M6-EZMp20wbD2gDsoD1JYqag66WnTDtZqJjQm3mv6Ohj59_C8RMOtPSLX4AxoS-n_8lYneaRc2UFm_vZepgricMNIZ4TuoLekb_fDlg7cvRtH61gD8hH7iFvQfpkf9rxoclPSG21qbxV4svUVW27DOd_Ewo3eSRdnSb8ctuGnXQuKE=" + }, + { + "kty": "RSA", + "kid": "default-kid", + "e": "AQAB", + "use": "sig", + "n": "AJtUGmczI7RHx3Ypqxz9_9mK_tc-vOXojlJcMm0VRvYvMLIDlIfj1BrkC_IYLpS2Vl1OTG8AS0xAgBDEG3EUzVU6JZKuIuuxD-iXrBySBQA2ytTYtCrjHD7osji7wyogxDJ2BtVz9191gjX7AlU_WKFPpViK2a_2bCL0K4vI3M6-EZMp20wbD2gDsoD1JYqag66WnTDtZqJjQm3mv6Ohj59_C8RMOtPSLX4AxoS-n_8lYneaRc2UFm_vZepgricMNIZ4TuoLekb_fDlg7cvRtH61gD8hH7iFvQfpkf9rxoclPSG21qbxV4svUVW27DOd_Ewo3eSRdnSb8ctuGnXQuKE=" + } + ] +} \ No newline at end of file diff --git a/java-security-core/src/test/resources/iasJsonWebTokenKeys_noKid.json b/java-security-core/src/test/resources/iasJsonWebTokenKeys_noKid.json new file mode 100644 index 0000000000..90dd837913 --- /dev/null +++ b/java-security-core/src/test/resources/iasJsonWebTokenKeys_noKid.json @@ -0,0 +1,10 @@ +{ + "keys": [ + { + "kty": "RSA", + "e": "AQAB", + "use": "sig", + "n": "AJtUGmczI7RHx3Ypqxz9_9mK_tc-vOXojlJcMm0VRvYvMLIDlIfj1BrkC_IYLpS2Vl1OTG8AS0xAgBDEG3EUzVU6JZKuIuuxD-iXrBySBQA2ytTYtCrjHD7osji7wyogxDJ2BtVz9191gjX7AlU_WKFPpViK2a_2bCL0K4vI3M6-EZMp20wbD2gDsoD1JYqag66WnTDtZqJjQm3mv6Ohj59_C8RMOtPSLX4AxoS-n_8lYneaRc2UFm_vZepgricMNIZ4TuoLekb_fDlg7cvRtH61gD8hH7iFvQfpkf9rxoclPSG21qbxV4svUVW27DOd_Ewo3eSRdnSb8ctuGnXQuKE=" + } + ] +} \ No newline at end of file diff --git a/java-security-core/src/test/resources/iasOidcTokenRSA256.txt b/java-security-core/src/test/resources/iasOidcTokenRSA256.txt new file mode 100644 index 0000000000..8667e3e740 --- /dev/null +++ b/java-security-core/src/test/resources/iasOidcTokenRSA256.txt @@ -0,0 +1 @@ +eyJraWQiOiJkZWZhdWx0LWtpZC1pYXMiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJQMTc2OTQ1IiwiYXBwX3RpZCI6InRoZS1hcHAtdGlkIiwiaXNzIjoiaHR0cHM6Ly9hcHBsaWNhdGlvbi5teWF1dGguY29tIiwiZ2l2ZW5fbmFtZSI6ImpvaG4iLCJhdWQiOlsiVDAwMDMxMCIsIlQwMDAzMzMiXSwic2NpbV9pZCI6InNjaW0tMTIzNDU2Nzg5MCIsInVzZXJfdXVpZCI6IjEyMzQ1Njc4OTAiLCJhenAiOiJUMDAwMzEwIiwiem9uZV91dWlkIjoidGhlLXpvbmUtaWQiLCJleHAiOjY5NzQwMzE2MDAsImZhbWlseV9uYW1lIjoiZG9lIiwiZW1haWwiOiJqb2huLmRvZUBlbWFpbC5vcmciLCJjaWQiOiJUMDAwMzEwIn0.NkM70DLlYg1kDS37QXtlj5sQbyjk-UGSh6pmeGDDAj8-En4eNxRsG3wF_b7zv-ZseRINLURKp5mSW1O_xqI91w77Z9wwT45g_7WynH7kfXhKiAU0Te0RpZ6Iy19JbZXkfmMfbSjGNNRz5VIiVlTQOMS0bsNNLtGzz5QvhC6MkpwS8afDMjw-RX4zK-KO2CHsU7r7wjsLLpOmIfzgtao_HJJUhQCBkqwPNgmEJeHKTzJeDHxeAk-_Zbz5Won7nkajNZ4W6kn7eb3E-Vry9z7HDpV2_OKZpOP5lAWHVW1b7abPQ92npPqEdKaIhZT105-oGiwp20dX5Up7enAT_um38A \ No newline at end of file diff --git a/java-security-core/src/test/resources/iasTokenInvalidCnfRSA256.txt b/java-security-core/src/test/resources/iasTokenInvalidCnfRSA256.txt new file mode 100644 index 0000000000..30ffcd78ba --- /dev/null +++ b/java-security-core/src/test/resources/iasTokenInvalidCnfRSA256.txt @@ -0,0 +1 @@ +eyJraWQiOiJkZWZhdWx0LWtpZC1pYXMiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOlsibXlDbGllbnRJZCJdLCJ1c2VyX3V1aWQiOiJ0aGUtdXNlci1pZCIsImF6cCI6IlQwMDAzMTAiLCJpc3MiOiJodHRwczovL2FwcGxpY2F0aW9uLm15YXV0aC5jb20iLCJ6b25lX3V1aWQiOiJ0aGUtem9uZS1pZCIsImNuZiI6eyJ4NXQjUzI1NiI6ImludmFsaWQifSwiZXhwIjo2OTc0MDMxNjAwLCJjaWQiOiJUMDAwMzEwIn0.Z2BwS6CpC9EAuh25xDB62RgeVfHpu0BzYnNMy7j-dq_deWrBVTr0ZEYDObM-E_c7J1gtSVQ4paJHS0OTcZkv3iigpxjjjUqUp1rhCZc76KXKgVG7JKZH8AtmeK-mTP5ssaEre-oLhatkWILieMrCcAkpcxF1W4wPsnOdljFwme7PzMkXDNTkD2lHuNt1IT1hi12GEGV6cv8M8tcf-A8JG0CtVbjA15qzCXOhIS-KpYBl41x_Onk6OtHnCPLkNzTjZn9lk_59Tc1NNzPp3_EgwCNvlAmWu3o9k_bHteoWuy8Mjr78L8a5JxaJeyZ6E9zbpEDldwHMmeNg0zEe4Zj91Q \ No newline at end of file diff --git a/java-security-core/src/test/resources/iasTokenWithCnfRSA256.txt b/java-security-core/src/test/resources/iasTokenWithCnfRSA256.txt new file mode 100644 index 0000000000..3506f3ea88 --- /dev/null +++ b/java-security-core/src/test/resources/iasTokenWithCnfRSA256.txt @@ -0,0 +1 @@ +eyJraWQiOiJkZWZhdWx0LWtpZC1pYXMiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOlsibXlDbGllbnRJZCJdLCJ1c2VyX3V1aWQiOiJ0aGUtdXNlci1pZCIsImF6cCI6IlQwMDAzMTAiLCJpc3MiOiJodHRwczovL2FwcGxpY2F0aW9uLm15YXV0aC5jb20iLCJ6b25lX3V1aWQiOiJ0aGUtem9uZS1pZCIsImNuZiI6eyJ4NXQjUzI1NiI6ImZVLVhvUWxoTVRwUXN6OUFyWGw2ekhJcE1HdVJPNEV4TEtkTFJUYzVWak0ifSwiZXhwIjo2OTc0MDMxNjAwLCJjaWQiOiJUMDAwMzEwIn0.dlALBMbhbKQg0JylLNQOdFYXYbohRPahsjJZeS7I-grIq8sIyWb2U1h9PyC6-XQa3c_d6ttvSAZluRTgCAjbjWbZbdlbojoo_Q-drr32xS8fCMRUxfBmtQ8We5FjX4U593VH0XIe6Am_64Met1g0Vq0tr5RGh0ucgqy-wQi2MCl1RVa0OEJzpPT_5tEmQgUAG3I7i-BjquMKuimBoq-srrmRgkmJlTFLn_SoOu1F54Wz6yrwdIJEz8UVmnAfjAFsvPSkwXohF9QSiAvfgtd6fYax429bdb607xCGicQFdeiIQ_FFjhF2PaTK0ZgrrmfVstcGxIvhVLQ0kVlOophEWw \ No newline at end of file diff --git a/java-security-core/src/test/resources/jsonWebTokenKeys.json b/java-security-core/src/test/resources/jsonWebTokenKeys.json new file mode 100644 index 0000000000..aecfd47f75 --- /dev/null +++ b/java-security-core/src/test/resources/jsonWebTokenKeys.json @@ -0,0 +1,30 @@ +{ + "keys": [ + { + "kty": "RSA", + "e": "AQAB", + "use": "sig", + "kid": "key-id-0", + "alg": "RS256", + "value": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm1QaZzMjtEfHdimrHP3/\n2Yr+1z685eiOUlwybRVG9i8wsgOUh+PUGuQL8hgulLZWXU5MbwBLTECAEMQbcRTN\nVTolkq4i67EP6JesHJIFADbK1Ni0KuMcPuiyOLvDKiDEMnYG1XP3X3WCNfsCVT9Y\noU+lWIrZr/ZsIvQri8jczr4RkynbTBsPaAOygPUlipqDrpadMO1momNCbea/o6GP\nn38LxEw609ItfgDGhL6f/yVid5pFzZQWb+9l6mCuJww0hnhO6gt6Rv98OWDty9G0\nfrWAPyEfuIW9B+mR/2vGhyU9IbbWpvFXiy9RVbbsM538TCjd5JF2dJvxy24addC4\noQIDAQAB\n-----END PUBLIC KEY-----", + }, + { + "kty": "RSA", + "e": "AQAB", + "use": "sig", + "kid": "key-id-1", + "alg": "RS256", + "value": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNM3OXfZS0Uu8eYZXCgG\nWFgVWQX6MHnadYk3zHZ5PIPeDY3ApaSGpMEiVwn1cT6KUVHMLHcmz1gsNy74pCnm\nCa22W7J3BoZulzR0A37ayMVrRHh3nffgySk8u581l02bvbcpab3e3EotSN5LixGT\n1VWZvDbalXf6n5kq459NWL6ZzkEs20MrOEk5cLdnsigTQUHSKIQ5TpldyDkJMm2z\nwOlrB2R984+QdlDFmoVH7Yaujxr2g0Z96u7W9Imik6wTiFc8W7eUXfhPGn7reVLq\n1/5o2Nz0Jx0ejFHDwTGncs+k1RBS6DbpTOMr9tkJEc3ZsX3Ft4OtqCkRXI5hUma+\nHwIDAQAB\n-----END PUBLIC KEY-----", + "n": "AJjTNzl32UtFLvHmGVwoBlhYFVkF-jB52nWJN8x2eTyD3g2NwKWkhqTBIlcJ9XE-ilFRzCx3Js9YLDcu-KQp5gmttluydwaGbpc0dAN-2sjFa0R4d5334MkpPLufNZdNm723KWm93txKLUjeS4sRk9VVmbw22pV3-p-ZKuOfTVi-mc5BLNtDKzhJOXC3Z7IoE0FB0iiEOU6ZXcg5CTJts8DpawdkffOPkHZQxZqFR-2Gro8a9oNGferu1vSJopOsE4hXPFu3lF34Txp-63lS6tf-aNjc9CcdHoxRw8Exp3LPpNUQUug26UzjK_bZCRHN2bF9xbeDragpEVyOYVJmvh8" + }, + { + "kty": "RSA", + "e": "AQAB", + "use": "sig", + "kid": "legacy-token-key", + "alg": "RS256", + "value": "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwOzNGEDK6jNrJcl3L2wstY8SnX9KNo4ic/JtrEQX4U/+749b9y6JlSGOXSKBFJ6alNGHVyPK66SfSgeWHwPjVekdnHYM7bQTyYX1NoSOxqUgvsktIpxeYJLC+J5qJTtnFcjFTRUovKwtCYxlTP4b63b7dWixwc+iSnkuvl4IkZjVTcstK73eTlmVtJDC5DIisPyYOK06qxTPrLC8KlgFA6a0FdPJF9G8s/ElxPHFu7mw6UKn2LTmDlDbADQZLMXGKBw/zg3l5scjxkOCVGTkGvv1ooccqCfYgZAsmsPbQdoZxznSdQTPfaWULnYLo8i5hFXiS1q8agvXHjWpUmWcMwIDAQAB-----END PUBLIC KEY-----", + "n": "AJjTNzl32UtFLvHmGVwoBlhYFVkF-jB52nWJN8x2eTyD3g2NwKWkhqTBIlcJ9XE-ilFRzCx3Js9YLDcu-KQp5gmttluydwaGbpc0dAN-2sjFa0R4d5334MkpPLufNZdNm723KWm93txKLUjeS4sRk9VVmbw22pV3-p-ZKuOfTVi-mc5BLNtDKzhJOXC3Z7IoE0FB0iiEOU6ZXcg5CTJts8DpawdkffOPkHZQxZqFR-2Gro8a9oNGferu1vSJopOsE4hXPFu3lF34Txp-63lS6tf-aNjc9CcdHoxRw8Exp3LPpNUQUug26UzjK_bZCRHN2bF9xbeDragpEVyOYVJmvh8" + } + ] +} \ No newline at end of file diff --git a/java-security-core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/java-security-core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 0000000000..ca6ee9cea8 --- /dev/null +++ b/java-security-core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline \ No newline at end of file diff --git a/java-security-core/src/test/resources/simplelogger.properties b/java-security-core/src/test/resources/simplelogger.properties new file mode 100644 index 0000000000..41b131f38e --- /dev/null +++ b/java-security-core/src/test/resources/simplelogger.properties @@ -0,0 +1,2 @@ +org.slf4j.simpleLogger.defaultLogLevel: WARN +org.slf4j.simpleLogger.log.com.sap.cloud.security.token.validation.validators: DEBUG \ No newline at end of file diff --git a/java-security-core/src/test/resources/uaaAccessTokenRSA256.txt b/java-security-core/src/test/resources/uaaAccessTokenRSA256.txt new file mode 100644 index 0000000000..137f2afeaf --- /dev/null +++ b/java-security-core/src/test/resources/uaaAccessTokenRSA256.txt @@ -0,0 +1 @@ +eyJqa3UiOiJodHRwOi8vYXV0aC5jb20vdG9rZW5fa2V5cyIsImtpZCI6ImtleS1pZC0wIiwiYWxnIjoiUlMyNTYifQ.eyJhdWQiOlsiZGFzaGJvYXJkX2NsaWVudC1JZCJdLCJ6aWQiOiJ1YWEiLCJncmFudF90eXBlIjoiYXV0aG9yaXphdGlvbl9jb2RlIiwidXNlcl9pZCI6InRlc3RVc2VySWQiLCJhenAiOiJkYXNoYm9hcmRfY2xpZW50LUlkIiwidXNlcl9uYW1lIjoidGVzdFVzZXIiLCJvcmlnaW4iOiJzYXAuaWRzIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo2MjcwMCIsImV4cCI6Njk3NDAzMTYwMH0.dA9gjVpX3G099gtRwIQDvppLyIaO5WsxAfmq71CTNKJv2J6LXgQOyhOk0NKgmQHxCvL-UEqnAImRXK1EF9ewgI_MD6Bn0N9mSGV0HmroM3es9go8t4f5DWNPllgTTgaiO34dIGEuFXkhn3uFVy34ErRhjAxuhknGg571jW2hg0jncDwMuC1mK_h7gvH-bb1ENmxG7NXSNZAQiJ0IlIZxixGmo1cJZP9V1oNugnE4mLJmB0I_7fRm9iYm0kBfLbOV_NgJ32AQ7I44SDoRlO1k5HvxKOPWwn2ZlSEoFiPnfsO9N4wrK1TZ-5kH8y6NpSI6R4hnJbmomZruEXnQ0MitpQ \ No newline at end of file diff --git a/java-security-core/src/test/resources/xsuaaAccessTokenRSA256_signedWithVerificationKey.txt b/java-security-core/src/test/resources/xsuaaAccessTokenRSA256_signedWithVerificationKey.txt new file mode 100644 index 0000000000..6cd6798cf6 --- /dev/null +++ b/java-security-core/src/test/resources/xsuaaAccessTokenRSA256_signedWithVerificationKey.txt @@ -0,0 +1 @@ +eyJqa3UiOiJodHRwOi8vbG9jYWxob3N0OjY1MTQ4L3Rva2VuX2tleXMiLCJhbGciOiJSUzI1NiJ9.eyJncmFudF90eXBlIjoidXNlcl90b2tlbiIsInNjb3BlIjpbImJ1bGxldGluYm9hcmQtQzUyOTU0MDAuRGlzcGxheSIsImJ1bGxldGluYm9hcmQtQzUyOTU0MDAuVXBkYXRlIl0sImNpZCI6InNiLWNsaWVudElkIXQwODE1In0=.CetA62rQSNRj93S9mqaHrKJyzONKeEKcEJ9O5wObRD_RHrRNHAIOtXUgm2Qy6IrrhvPNY8CdNVmosrXOOebJZLwGdNNREqSz0Xu1tl3_Z3fzekq4dTV0yccTCfAYHVvUNbCdkXBYr2UTYULSMMXHXI5yuEtQaaQTxWN7k67Tgajq4BXUOT-asp3X-zhmMpmoTqAj8ARNrtaXUOzEt9inPgkMMhMJM3HT47p6SHe3XL8v0yBEIAsAQlxPPCjak9BSpCUUA-c6ZOEOIZBb346zZhCsV5SN1xC5cMZiFjHP6P0LIzQBEVlPpOy0NfIWdyH-o8FUUcI3nEzFx0qxc_TvuQ== \ No newline at end of file diff --git a/java-security-core/src/test/resources/xsuaaCCAccessTokenRSA256.txt b/java-security-core/src/test/resources/xsuaaCCAccessTokenRSA256.txt new file mode 100644 index 0000000000..8a4ca5bc5d --- /dev/null +++ b/java-security-core/src/test/resources/xsuaaCCAccessTokenRSA256.txt @@ -0,0 +1 @@ +eyJhbGciOiJSUzI1NiIsImprdSI6Imh0dHBzOi8vYXV0aGVudGljYXRpb24uc3RhZ2luZ2F3cy5oYW5hdmxhYi5vbmRlbWFuZC5jb20vdG9rZW5fa2V5cyIsImtpZCI6ImtleS1pZC0xIiwidHlwIjoiSldUIn0.eyJqdGkiOiIyYTZiNDcxODJjZTM0YzgzYTNjNDY0MWI1NTZiOTQ2YyIsImV4dF9hdHRyIjp7ImVuaGFuY2VyIjoiWFNVQUEifSwic3ViIjoic2FwX29zYiIsImF1dGhvcml0aWVzIjpbInVhYS5yZXNvdXJjZSIsIlJPTEVfU0VSVklDRUJST0tFUiJdLCJzY29wZSI6WyJST0xFX1NFUlZJQ0VCUk9LRVIiLCJ1YWEucmVzb3VyY2UiXSwiY2xpZW50X2lkIjoic2FwX29zYiIsImNpZCI6InNhcF9vc2IiLCJhenAiOiJzYXBfb3NiIiwiZ3JhbnRfdHlwZSI6ImNsaWVudF9jcmVkZW50aWFscyIsInJldl9zaWciOiJiMjNhNzJkYyIsImlhdCI6MTU3MjAxNzU2OSwiZXhwIjoxNTcyMDYwNzY5LCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvdWFhL29hdXRoL3Rva2VuIiwiemlkIjoidWFhIiwiYXVkIjpbInVhYSIsInNhcF9vc2IiXX0.OLDZiMerzH4gNELQEHCPUy7aD681L-twKYyfRSuNQAvlEeQeMaQm7_ZX3WrQ7HF04PASSocBkebG4PmFcbzX5uRSxoxUPbPB1JFsdbb_MU5o0P-xbYStY_lL0UVcZsSy2QrZwcNgtdTbHXpme2xn3jjW6KdwfO6Zd19fcPpPdstlmp34uUFBGfSkXek5sRDCw3ZklEStYIQG9dYsxEq-AmtEqsgPjVdFWv6_bfe8HqOoNfx1QC31DNNQQiAZBFFuZ3iX7IQWRHMdVjWw5GF7tvxM8al-wt8flaZ6gBvHTGzwGKBlDZYtKMDO57L5SyFCgwedoRdzE2NHIHvvp3CKEw \ No newline at end of file diff --git a/java-security-core/src/test/resources/xsuaaJwtBearerTokenRSA256.txt b/java-security-core/src/test/resources/xsuaaJwtBearerTokenRSA256.txt new file mode 100644 index 0000000000..bb32b0b4f3 --- /dev/null +++ b/java-security-core/src/test/resources/xsuaaJwtBearerTokenRSA256.txt @@ -0,0 +1 @@ +eyJqa3UiOiJodHRwOi8vYXV0aC5jb20vdG9rZW5fa2V5cyIsImtpZCI6ImtleS1pZC0wIiwiYWxnIjoiUlMyNTYifQ.eyJhdWQiOlsiY2xpZW50SWQiXSwiZXh0X2F0dHIiOnsiemRuIjoidGhlU3ViZG9tYWluIiwiZW5oYW5jZXIiOiJYU1VBQSJ9LCJ6aWQiOiJ0aGUtem9uZS1pZCIsImdyYW50X3R5cGUiOiJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTpqd3QtYmVhcmVyIiwiYXpwIjoiY2xpZW50SWQiLCJ1c2VyX25hbWUiOiJ0ZXN0VXNlciIsIm9yaWdpbiI6InVzZXJJZHAiLCJpc3MiOiJodHRwOi8vYXV0aC5jb20iLCJleHAiOjY5NzQwMzE2MDAsImNpZCI6ImNsaWVudElkIn0.jD6fsDWbTvTX7Biy7BjIV_Wu3UGe09fYeVevQ3qV1Rd6jkjps2a1gSzzPxNgf3MkkV7Ow54UnC0k2kQclT6MgsDHtakGmjCGxd4BMnqSe8tO38UY1MytRpRbP6Vy1C5StbdgyoIO1YIMMV-IYfYbQZBzB6VowY7n5v7UJ5-qQiGfarpJDfOz9LlggYmHiFWaTHn0HCQrpUQvikwRuDjcDm2YXNvO_sFTeMJGDmGJgDY7ICGdCuN3yGnRybZMLOiEgSyciSgex59hfwH4r7mJpGyB3L_-FwpX-7u1NF8qEjKsmR9dtFmrxvoth1Otpv_NYoL2mGd4Ea5FO9b-DWzAMA \ No newline at end of file diff --git a/java-security-core/src/test/resources/xsuaaXsaAccessTokenRSA256_signedWithVerificationKey.txt b/java-security-core/src/test/resources/xsuaaXsaAccessTokenRSA256_signedWithVerificationKey.txt new file mode 100644 index 0000000000..451458c243 --- /dev/null +++ b/java-security-core/src/test/resources/xsuaaXsaAccessTokenRSA256_signedWithVerificationKey.txt @@ -0,0 +1 @@ +eyJhbGciOiAiUlMyNTYiLCJ0eXAiOiAiSldUIn0.eyJqdGkiOiI1MmEzMzU2ZmRkYzQ0YTM1OTU4M2IwZjg0YmJiNDllZCIsInhzLnVzZXIuYXR0cmlidXRlcyI6e30sImV4dF9hdHRyIjp7ImVuaGFuY2VyIjoiWFNVQUEifSwic3ViIjoiMTYwNDk3Iiwic2NvcGUiOlsib3BlbmlkIl0sImNsaWVudF9pZCI6InNiLWphdmEtaGVsbG8td29ybGQhaTEiLCJjaWQiOiJzYi1qYXZhLWhlbGxvLXdvcmxkIWkxIiwiYXpwIjoic2ItamF2YS1oZWxsby13b3JsZCFpMSIsImdyYW50X3R5cGUiOiJhdXRob3JpemF0aW9uX2NvZGUiLCJ1c2VyX2lkIjoiMTYwNDk3Iiwib3JpZ2luIjoidWFhIiwidXNlcl9uYW1lIjoiWFNBX0FETUlOIiwiZW1haWwiOiJYU0FfQURNSU5AWFMxIiwiYXV0aF90aW1lIjoxNTc5NTI2ODQwLCJyZXZfc2lnIjoiZWVhMWNjNWUiLCJpYXQiOjE1Nzk1MjcwODcsImV4cCI6MTU3OTU3MDI4NywiaXNzIjoiaHR0cDovL3hzYS1hMjcyZDg2YS0wZjc0LTQ0OGMtOTNkMS02Yjc4OTAzZDE1NDMvVUFBL29hdXRoL3Rva2VuIiwiemlkIjoidWFhIiwiYXVkIjpbInNiLWphdmEtaGVsbG8td29ybGQhaTEiLCJvcGVuaWQiXX0.EY4Xh2ExTa07C6dkyjm5fwCxAsrV1rv1DfwVfaM0i5BjybVyfVa5F3PnNnSKCwmIMzpVWJ0vQgKJi_3GYTTRfC4UtxRNPIsFLovgyIQ9VbWLJGr0PCcv7-dt0ZXxRQ3mcQQ3NFl2PNVfFz2kk_5hMZZhOIxH00fyc_-BWE1yYndWPHSCJhynbje_RudG7x9McJMNAkcNY9O1wK3pOAnAFUNjM_CEV2Su6AZ6SLSq29o8OR5brI83RXGFPaxudNyTH1pyG4T-JrD8HJAf0KGxRdqDyteGo-bxnorZ57idxE6dBiKr8lBMCv6hJ2Lb0tOEVE66YSBz2BCNrfMZ02ct7Q \ No newline at end of file From 3f55e0e54dcb971948af9a28b4be3e676467abd9 Mon Sep 17 00:00:00 2001 From: Niklasherrmann21 Date: Thu, 17 Sep 2026 17:02:23 +0200 Subject: [PATCH 2/3] build: Wire java-security-core into parent build, BOM and java-security - Add java-security-core to the root reactor - Add java-security-core to the java-bom dependency management - java-security now depends on java-security-core (kept classes reference the moved ones); existing consumers get the moved classes transitively, so this is backward compatible (minor release) --- bom/pom.xml | 5 +++++ java-security/pom.xml | 5 +++++ pom.xml | 1 + 3 files changed, 11 insertions(+) diff --git a/bom/pom.xml b/bom/pom.xml index 0e4dcee874..ed4f48be1e 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -56,6 +56,11 @@ env ${project.version} + + ${project.groupId} + java-security-core + ${project.version} + ${project.groupId} java-security diff --git a/java-security/pom.xml b/java-security/pom.xml index ec65f56517..285cadff2f 100644 --- a/java-security/pom.xml +++ b/java-security/pom.xml @@ -48,6 +48,11 @@ + + com.sap.cloud.security + java-security-core + ${project.version} + com.sap.cloud.security java-api diff --git a/pom.xml b/pom.xml index e90f88de95..2e1450fd3d 100644 --- a/pom.xml +++ b/pom.xml @@ -88,6 +88,7 @@ token-client token-client-spring token-client-spring-3 + java-security-core java-security spring-security spring-security-3 From 9fc88b509f8b360f91d49261c2dbc9c77e2e9e2b Mon Sep 17 00:00:00 2001 From: Niklasherrmann21 Date: Thu, 17 Sep 2026 17:03:59 +0200 Subject: [PATCH 3/3] docs: Document java-security-core split in READMEs and CHANGELOG - Root README: note that javax/Tomcat 9 environments should use java-security-core (no jakarta.servlet, no Spring) - java-security README: "The core part" section explaining what moved and that the FQNs are unchanged; fix source links to the moved classes - CHANGELOG: 4.2.0 section describing the split and compatibility --- CHANGELOG.md | 9 +++++++++ README.md | 2 ++ java-security/README.md | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d0bbaf2d7..59030f2250 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +## 4.2.0 + +- Split `java-security` into a new `java-security-core` module for Jakarta-free token validation + - The token model (`com.sap.cloud.security.token`), the JWT validation packages (`com.sap.cloud.security.token.validation`, incl. `JwtValidatorBuilder` and all validators), `com.sap.cloud.security.x509`, and the `TokenFactory` ServiceLoader registration (via `HybridTokenFactory`) moved to `java-security-core` + - `java-security-core` has no `jakarta.servlet` and no Spring dependencies, so token validation can be used from javax-based runtimes (e.g. Tomcat 9) without any Jakarta API on the classpath + - `java-security` keeps the servlet-based authenticators (`HybridTokenAuthenticator`, `IasTokenAuthenticator`, `XsuaaTokenAuthenticator`) and the Spring security context adapter, and now depends on `java-security-core` + - No API or behavior change for existing `java-security` consumers: all moved classes keep their fully qualified names and stay on the classpath transitively (minor release) + + ## 4.1.2 - Enforce constructor-supplied service configurations in `HybridTokenAuthenticator` diff --git a/README.md b/README.md index 1ec01ca75b..ab8f2932bc 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,8 @@ Key features: Developers who need OAuth2 token validation and token access in their Jakarta EE applications can utilize the [java-security](./java-security) library. This library simplifies the process of acquiring token information such as principal and audiences from the security context and takes over token validation for tokens issued by Xsuaa or Identity services. This library is also integrated in SAP Java Buildpack. +:bulb: **javax / Tomcat 9 environments (no Jakarta)**: If you need token validation without Jakarta EE (e.g. Tomcat 9 / `javax.servlet` runtimes), use the [java-security-core](./java-security-core) module. It contains the token model, all JWT validators (`JwtValidatorBuilder` and friends) and `TokenFactory` registration, and has **no `jakarta.servlet` or Spring dependency**. The servlet-based authenticators (`HybridTokenAuthenticator`, `IasTokenAuthenticator`, `XsuaaTokenAuthenticator`) remain in [java-security](./java-security), which depends on `java-security-core`. + In the table below you'll find links to detailed information. | Library | Usage Examples | diff --git a/java-security/README.md b/java-security/README.md index 77351c592e..909fecb6a1 100644 --- a/java-security/README.md +++ b/java-security/README.md @@ -144,7 +144,7 @@ The `HybridTokenAuthenticator` is designed for hybrid scenarios where an applica `OAuth2ServiceConfiguration`](java-api/src/main/java/com/sap/cloud/security/config/OAuth2ServiceConfiguration.java)) - HTTP client for token exchange (`SecurityHttpClient` via [ `SecurityHttpClientProvider`](token-client/src/main/java/com/sap/cloud/security/client/SecurityHttpClientProvider.java)) -- Chosen [`TokenExchangeMode`](java-security/src/main/java/com/sap/cloud/security/token/TokenExchangeMode.java) +- Chosen [`TokenExchangeMode`](../java-security-core/src/main/java/com/sap/cloud/security/token/TokenExchangeMode.java) **Configuration Example**: