Skip to content

Commit 5f2e57b

Browse files
feat: SAML (#1192)
* fix: outline * fix: login redirect impl * fix: handle SAML callback * fix: saml cert management * fix: authn request signing * fix: working login for azure * fix: save idp entity id * fix: use client id from relay state info * fix: create or update saml client * fix: generate clientId * fix: list SAML Clients * fix: remove saml client * fix: saml callback and token * fix: idp flow * fix: remove unnecessary logging * fix: apis to work like boxy * fix: add support for legacy SAML ACS URL and enhance SAML client management * fix: enforce public tenant in legacy APIs * fix: client secret checking in legacy API * fix: cronjob to cleanup saml codes * fix: tests * fix: version update * test: create or update saml client * test: list and delete saml client * test: create saml login redirect * test: bad inputs for handle saml callback * fix: expiration handling * test: SAML audience check * fix: enable request signing * fix: remove metadata url and add enable request signing * fix: remaining tests * fix: idp flow tests * fix: tests * fix: remove sp entity id from client * fix: saml feature check * fix: unique idp entity id * fix: sp metadata and featureflag test * fix: tests * fix: global logging level * fix: changelog * fix: SAML client count * fix: saml stats * fix: SAML certificate refresh * fix: SAML metadata API * fix: tests * fix: not loading keys on tenant creation * fix: deadlock * fix: removing deadlock causing code * fix: removing locks * Revert "fix: deadlock" This reverts commit 2d5a07c. * fix: index for expires_at * fix: rename saml cleanup cron task * experiment: Deadlock logger (#1198) * experiment: Deadlock logger * fix: race issue with oauth refresh (#1199) * fix: race issue with oauth refresh * fix: review comment * fix: remove print * fix: deadlock in resource distributor (#1197) * adding dev-v11.2.1 tag to this commit to ensure building * fix: add deadlock logger * fix: changelog and build version * fix: only start deadlocklogger if it's enabled --------- Co-authored-by: Sattvik Chakravarthy <[email protected]> Co-authored-by: Supertokens Bot <> * fix: tests * fix: tests * fix: inmemory tests * fix: gradle * fix: deadlock in delete table * fix: in memory test for concurrency * fix: configurable claims and relay state validity and cleanup * fix: generating secure random for serial number * fix: bulk import chunking * fix: revert lock related changes * fix: auto commit * fix: revert bulk import * fix: auto commit --------- Co-authored-by: Tamas Soltesz <[email protected]>
1 parent bce3231 commit 5f2e57b

File tree

67 files changed

+6537
-92
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+6537
-92
lines changed

CHANGELOG.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,69 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

88
## [Unreleased]
99

10+
## [11.3.0]
11+
12+
- Adds SAML features
13+
- Fixes potential deadlock issue with `TelemetryProvider`
14+
- Adds DeadlockLogger as an utility for discovering deadlock issues
15+
16+
### Migration
17+
18+
```sql
19+
CREATE TABLE IF NOT EXISTS saml_clients (
20+
app_id VARCHAR(64) NOT NULL DEFAULT 'public',
21+
tenant_id VARCHAR(64) NOT NULL DEFAULT 'public',
22+
client_id VARCHAR(256) NOT NULL,
23+
client_secret TEXT,
24+
sso_login_url TEXT NOT NULL,
25+
redirect_uris TEXT NOT NULL,
26+
default_redirect_uri TEXT NOT NULL,
27+
idp_entity_id VARCHAR(256) NOT NULL,
28+
idp_signing_certificate TEXT NOT NULL,
29+
allow_idp_initiated_login BOOLEAN NOT NULL DEFAULT FALSE,
30+
enable_request_signing BOOLEAN NOT NULL DEFAULT FALSE,
31+
created_at BIGINT NOT NULL,
32+
updated_at BIGINT NOT NULL,
33+
CONSTRAINT saml_clients_pkey PRIMARY KEY(app_id, tenant_id, client_id),
34+
CONSTRAINT saml_clients_idp_entity_id_key UNIQUE (app_id, tenant_id, idp_entity_id),
35+
CONSTRAINT saml_clients_app_id_fkey FOREIGN KEY(app_id) REFERENCES apps (app_id) ON DELETE CASCADE,
36+
CONSTRAINT saml_clients_tenant_id_fkey FOREIGN KEY(app_id, tenant_id) REFERENCES tenants (app_id, tenant_id) ON DELETE CASCADE
37+
);
38+
39+
CREATE INDEX IF NOT EXISTS saml_clients_app_id_tenant_id_index ON saml_clients (app_id, tenant_id);
40+
41+
CREATE TABLE IF NOT EXISTS saml_relay_state (
42+
app_id VARCHAR(64) NOT NULL DEFAULT 'public',
43+
tenant_id VARCHAR(64) NOT NULL DEFAULT 'public',
44+
relay_state VARCHAR(256) NOT NULL,
45+
client_id VARCHAR(256) NOT NULL,
46+
state TEXT NOT NULL,
47+
redirect_uri TEXT NOT NULL,
48+
created_at BIGINT NOT NULL,
49+
CONSTRAINT saml_relay_state_pkey PRIMARY KEY(app_id, tenant_id, relay_state),
50+
CONSTRAINT saml_relay_state_app_id_fkey FOREIGN KEY(app_id) REFERENCES apps (app_id) ON DELETE CASCADE,
51+
CONSTRAINT saml_relay_state_tenant_id_fkey FOREIGN KEY(app_id, tenant_id) REFERENCES tenants (app_id, tenant_id) ON DELETE CASCADE
52+
);
53+
54+
CREATE INDEX IF NOT EXISTS saml_relay_state_app_id_tenant_id_index ON saml_relay_state (app_id, tenant_id);
55+
CREATE INDEX IF NOT EXISTS saml_relay_state_expires_at_index ON saml_relay_state (expires_at);
56+
57+
CREATE TABLE IF NOT EXISTS saml_claims (
58+
app_id VARCHAR(64) NOT NULL DEFAULT 'public',
59+
tenant_id VARCHAR(64) NOT NULL DEFAULT 'public',
60+
client_id VARCHAR(256) NOT NULL,
61+
code VARCHAR(256) NOT NULL,
62+
claims TEXT NOT NULL,
63+
created_at BIGINT NOT NULL,
64+
CONSTRAINT saml_claims_pkey PRIMARY KEY(app_id, tenant_id, code),
65+
CONSTRAINT saml_claims_app_id_fkey FOREIGN KEY(app_id) REFERENCES apps (app_id) ON DELETE CASCADE,
66+
CONSTRAINT saml_claims_tenant_id_fkey FOREIGN KEY(app_id, tenant_id) REFERENCES tenants (app_id, tenant_id) ON DELETE CASCADE
67+
);
68+
69+
CREATE INDEX IF NOT EXISTS saml_claims_app_id_tenant_id_index ON saml_claims (app_id, tenant_id);
70+
CREATE INDEX IF NOT EXISTS saml_claims_expires_at_index ON saml_claims (expires_at);
71+
```
72+
1073
## [11.2.1]
1174

1275
- Fixes deadlock issue with `ResourceDistributor`

build.gradle

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ java {
2727
}
2828
}
2929

30-
version = "11.2.1"
30+
version = "11.3.0"
3131

3232
repositories {
3333
mavenCentral()
34+
35+
maven { url 'https://build.shibboleth.net/nexus/content/repositories/releases/' }
3436
}
3537

3638
dependencies {
@@ -86,11 +88,16 @@ dependencies {
8688

8789
implementation platform("io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.17.0-alpha")
8890

91+
// Open SAML
92+
implementation group: 'org.opensaml', name: 'opensaml-core', version: '4.3.1'
93+
implementation group: 'org.opensaml', name: 'opensaml-saml-impl', version: '4.3.1'
94+
implementation group: 'org.opensaml', name: 'opensaml-security-impl', version: '4.3.1'
95+
implementation group: 'org.opensaml', name: 'opensaml-profile-impl', version: '4.3.1'
96+
implementation group: 'org.opensaml', name: 'opensaml-xmlsec-impl', version: '4.3.1'
8997

9098
implementation("ch.qos.logback:logback-core:1.5.18")
9199
implementation("ch.qos.logback:logback-classic:1.5.18")
92100

93-
94101
// OpenTelemetry core
95102
implementation("io.opentelemetry:opentelemetry-sdk")
96103
implementation("io.opentelemetry:opentelemetry-exporter-otlp")

cli/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ plugins {
44

55
repositories {
66
mavenCentral()
7+
8+
maven { url 'https://build.shibboleth.net/nexus/content/repositories/releases/' }
79
}
810

911
application {

config.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,3 +186,18 @@ core_config_version: 0
186186
# (OPTIONAL | Default: null) string value. The URL of the OpenTelemetry collector to which the core
187187
# will send telemetry data. This should be in the format http://<host>:<port> or https://<host>:<port>.
188188
# otel_collector_connection_uri:
189+
190+
# (OPTIONAL | Default: false) boolean value. Enables or disables the deadlock logger.
191+
# deadlock_logger_enable:
192+
193+
# (OPTIONAL | Default: null) string value. If specified, uses this URL as ACS URL for handling legacy SAML clients
194+
# saml_legacy_acs_url:
195+
196+
# (OPTIONAL | Default: https://saml.supertokens.com) string value. Service provider's entity ID.
197+
# saml_sp_entity_id:
198+
199+
# OPTIONAL | Default: 300000) long value. Duration for which SAML claims will be valid before it is consumed
200+
# saml_claims_validity:
201+
202+
# OPTIONAL | Default: 300000) long value. Duration for which SAML relay state will be valid before it is consumed
203+
# saml_relay_state_validity:

coreDriverInterfaceSupported.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"5.0",
2323
"5.1",
2424
"5.2",
25-
"5.3"
25+
"5.3",
26+
"5.4"
2627
]
2728
}

devConfig.yaml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,4 +185,19 @@ disable_telemetry: true
185185

186186
# (OPTIONAL | Default: null) string value. The URL of the OpenTelemetry collector to which the core
187187
# will send telemetry data. This should be in the format http://<host>:<port> or https://<host>:<port>.
188-
# otel_collector_connection_uri:
188+
# otel_collector_connection_uri:
189+
190+
# (OPTIONAL | Default: false) boolean value. Enables or disables the deadlock logger.
191+
# deadlock_logger_enable:
192+
193+
# (OPTIONAL | Default: null) string value. If specified, uses this URL as ACS URL for handling legacy SAML clients
194+
saml_legacy_acs_url: "http://localhost:5225/api/oauth/saml"
195+
196+
# (OPTIONAL | Default: https://saml.supertokens.com) string value. Service provider's entity ID.
197+
# saml_sp_entity_id:
198+
199+
# OPTIONAL | Default: 300000) long value. Duration for which SAML claims will be valid before it is consumed
200+
# saml_claims_validity:
201+
202+
# OPTIONAL | Default: 300000) long value. Duration for which SAML relay state will be valid before it is consumed
203+
# saml_relay_state_validity:

ee/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ version = 'unspecified'
66

77
repositories {
88
mavenCentral()
9+
10+
maven { url 'https://build.shibboleth.net/nexus/content/repositories/releases/' }
911
}
1012

1113
jar {
@@ -52,6 +54,7 @@ dependencies {
5254
testImplementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.16.1'
5355

5456
testImplementation group: 'org.jetbrains', name: 'annotations', version: '13.0'
57+
5558
}
5659

5760
tasks.register('copyJars', Copy) {

ee/src/main/java/io/supertokens/ee/EEFeatureFlag.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import io.supertokens.pluginInterface.multitenancy.ThirdPartyConfig;
3535
import io.supertokens.pluginInterface.multitenancy.exceptions.TenantOrAppNotFoundException;
3636
import io.supertokens.pluginInterface.oauth.OAuthStorage;
37+
import io.supertokens.pluginInterface.saml.SAMLStorage;
3738
import io.supertokens.pluginInterface.session.sqlStorage.SessionSQLStorage;
3839
import io.supertokens.storageLayer.StorageLayer;
3940
import io.supertokens.utils.Utils;
@@ -386,6 +387,34 @@ private JsonArray getMAUs() throws StorageQueryException, TenantOrAppNotFoundExc
386387
return mauArr;
387388
}
388389

390+
private JsonObject getSAMLStats() throws TenantOrAppNotFoundException, StorageQueryException {
391+
JsonObject stats = new JsonObject();
392+
393+
stats.addProperty("connectionUriDomain", this.appIdentifier.getConnectionUriDomain());
394+
stats.addProperty("appId", this.appIdentifier.getAppId());
395+
396+
JsonArray tenantStats = new JsonArray();
397+
398+
TenantConfig[] tenantConfigs = Multitenancy.getAllTenantsForApp(this.appIdentifier, main);
399+
for (TenantConfig tenantConfig : tenantConfigs) {
400+
JsonObject tenantStat = new JsonObject();
401+
tenantStat.addProperty("tenantId", tenantConfig.tenantIdentifier.getTenantId());
402+
403+
{
404+
Storage storage = StorageLayer.getStorage(tenantConfig.tenantIdentifier, main);
405+
SAMLStorage samlStorage = StorageUtils.getSAMLStorage(storage);
406+
407+
JsonObject stat = new JsonObject();
408+
stat.addProperty("numberOfSAMLClients", samlStorage.countSAMLClients(tenantConfig.tenantIdentifier));
409+
stat.add(tenantConfig.tenantIdentifier.getTenantId(), stat);
410+
}
411+
}
412+
413+
stats.add("tenants", tenantStats);
414+
415+
return stats;
416+
}
417+
389418
@Override
390419
public JsonObject getPaidFeatureStats() throws StorageQueryException, TenantOrAppNotFoundException {
391420
JsonObject usageStats = new JsonObject();
@@ -433,6 +462,10 @@ public JsonObject getPaidFeatureStats() throws StorageQueryException, TenantOrAp
433462
if (feature == EE_FEATURES.OAUTH) {
434463
usageStats.add(EE_FEATURES.OAUTH.toString(), getOAuthStats());
435464
}
465+
466+
if (feature == EE_FEATURES.SAML) {
467+
usageStats.add(EE_FEATURES.SAML.toString(), getSAMLStats());
468+
}
436469
}
437470

438471
usageStats.add("maus", getMAUs());

implementationDependencies.json

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,146 @@
101101
"name":"webauthn4j-core 0.28.6.RELEASE",
102102
"src":"https://repo.maven.apache.org/maven2/com/webauthn4j/webauthn4j-core/0.28.6.RELEASE/webauthn4j-core-0.28.6.RELEASE-sources.jar"
103103
},
104+
{
105+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-core/4.3.1/opensaml-core-4.3.1.jar",
106+
"name":"opensaml-core 4.3.1",
107+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-core/4.3.1/opensaml-core-4.3.1-sources.jar"
108+
},
109+
{
110+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/net/shibboleth/utilities/java-support/8.4.1/java-support-8.4.1.jar",
111+
"name":"java-support 8.4.1",
112+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/net/shibboleth/utilities/java-support/8.4.1/java-support-8.4.1-sources.jar"
113+
},
114+
{
115+
"jar":"https://repo.maven.apache.org/maven2/com/google/guava/guava/31.1-jre/guava-31.1-jre.jar",
116+
"name":"guava 31.1-jre",
117+
"src":"https://repo.maven.apache.org/maven2/com/google/guava/guava/31.1-jre/guava-31.1-jre-sources.jar"
118+
},
119+
{
120+
"jar":"https://repo.maven.apache.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar",
121+
"name":"failureaccess 1.0.1",
122+
"src":"https://repo.maven.apache.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar"
123+
},
124+
{
125+
"jar":"https://repo.maven.apache.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar",
126+
"name":"listenablefuture 9999.0-empty-to-avoid-conflict-with-guava",
127+
"src":"https://repo.maven.apache.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava-sources.jar"
128+
},
129+
{
130+
"jar":"https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar",
131+
"name":"j2objc-annotations 1.3",
132+
"src":"https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar"
133+
},
134+
{
135+
"jar":"https://repo.maven.apache.org/maven2/io/dropwizard/metrics/metrics-core/4.2.25/metrics-core-4.2.25.jar",
136+
"name":"metrics-core 4.2.25",
137+
"src":"https://repo.maven.apache.org/maven2/io/dropwizard/metrics/metrics-core/4.2.25/metrics-core-4.2.25-sources.jar"
138+
},
139+
{
140+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-saml-impl/4.3.1/opensaml-saml-impl-4.3.1.jar",
141+
"name":"opensaml-saml-impl 4.3.1",
142+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-saml-impl/4.3.1/opensaml-saml-impl-4.3.1-sources.jar"
143+
},
144+
{
145+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-xmlsec-impl/4.3.1/opensaml-xmlsec-impl-4.3.1.jar",
146+
"name":"opensaml-xmlsec-impl 4.3.1",
147+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-xmlsec-impl/4.3.1/opensaml-xmlsec-impl-4.3.1-sources.jar"
148+
},
149+
{
150+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-security-impl/4.3.1/opensaml-security-impl-4.3.1.jar",
151+
"name":"opensaml-security-impl 4.3.1",
152+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-security-impl/4.3.1/opensaml-security-impl-4.3.1-sources.jar"
153+
},
154+
{
155+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-security-api/4.3.1/opensaml-security-api-4.3.1.jar",
156+
"name":"opensaml-security-api 4.3.1",
157+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-security-api/4.3.1/opensaml-security-api-4.3.1-sources.jar"
158+
},
159+
{
160+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-messaging-api/4.3.1/opensaml-messaging-api-4.3.1.jar",
161+
"name":"opensaml-messaging-api 4.3.1",
162+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-messaging-api/4.3.1/opensaml-messaging-api-4.3.1-sources.jar"
163+
},
164+
{
165+
"jar":"https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar",
166+
"name":"httpclient 4.5.14",
167+
"src":"https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14-sources.jar"
168+
},
169+
{
170+
"jar":"https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar",
171+
"name":"httpcore 4.4.16",
172+
"src":"https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16-sources.jar"
173+
},
174+
{
175+
"jar":"https://repo.maven.apache.org/maven2/org/cryptacular/cryptacular/1.2.5/cryptacular-1.2.5.jar",
176+
"name":"cryptacular 1.2.5",
177+
"src":"https://repo.maven.apache.org/maven2/org/cryptacular/cryptacular/1.2.5/cryptacular-1.2.5-sources.jar"
178+
},
179+
{
180+
"jar":"https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk18on/1.72/bcprov-jdk18on-1.72.jar",
181+
"name":"bcprov-jdk18on 1.72",
182+
"src":"https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk18on/1.72/bcprov-jdk18on-1.72-sources.jar"
183+
},
184+
{
185+
"jar":"https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk18on/1.72/bcpkix-jdk18on-1.72.jar",
186+
"name":"bcpkix-jdk18on 1.72",
187+
"src":"https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk18on/1.72/bcpkix-jdk18on-1.72-sources.jar"
188+
},
189+
{
190+
"jar":"https://repo.maven.apache.org/maven2/org/bouncycastle/bcutil-jdk18on/1.72/bcutil-jdk18on-1.72.jar",
191+
"name":"bcutil-jdk18on 1.72",
192+
"src":"https://repo.maven.apache.org/maven2/org/bouncycastle/bcutil-jdk18on/1.72/bcutil-jdk18on-1.72-sources.jar"
193+
},
194+
{
195+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-xmlsec-api/4.3.1/opensaml-xmlsec-api-4.3.1.jar",
196+
"name":"opensaml-xmlsec-api 4.3.1",
197+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-xmlsec-api/4.3.1/opensaml-xmlsec-api-4.3.1-sources.jar"
198+
},
199+
{
200+
"jar":"https://repo.maven.apache.org/maven2/org/apache/santuario/xmlsec/2.3.4/xmlsec-2.3.4.jar",
201+
"name":"xmlsec 2.3.4",
202+
"src":"https://repo.maven.apache.org/maven2/org/apache/santuario/xmlsec/2.3.4/xmlsec-2.3.4-sources.jar"
203+
},
204+
{
205+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-saml-api/4.3.1/opensaml-saml-api-4.3.1.jar",
206+
"name":"opensaml-saml-api 4.3.1",
207+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-saml-api/4.3.1/opensaml-saml-api-4.3.1-sources.jar"
208+
},
209+
{
210+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-profile-api/4.3.1/opensaml-profile-api-4.3.1.jar",
211+
"name":"opensaml-profile-api 4.3.1",
212+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-profile-api/4.3.1/opensaml-profile-api-4.3.1-sources.jar"
213+
},
214+
{
215+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-soap-api/4.3.1/opensaml-soap-api-4.3.1.jar",
216+
"name":"opensaml-soap-api 4.3.1",
217+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-soap-api/4.3.1/opensaml-soap-api-4.3.1-sources.jar"
218+
},
219+
{
220+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-soap-impl/4.3.1/opensaml-soap-impl-4.3.1.jar",
221+
"name":"opensaml-soap-impl 4.3.1",
222+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-soap-impl/4.3.1/opensaml-soap-impl-4.3.1-sources.jar"
223+
},
224+
{
225+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-storage-api/4.3.1/opensaml-storage-api-4.3.1.jar",
226+
"name":"opensaml-storage-api 4.3.1",
227+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-storage-api/4.3.1/opensaml-storage-api-4.3.1-sources.jar"
228+
},
229+
{
230+
"jar":"https://repo.maven.apache.org/maven2/org/apache/velocity/velocity-engine-core/2.3/velocity-engine-core-2.3.jar",
231+
"name":"velocity-engine-core 2.3",
232+
"src":"https://repo.maven.apache.org/maven2/org/apache/velocity/velocity-engine-core/2.3/velocity-engine-core-2.3-sources.jar"
233+
},
234+
{
235+
"jar":"https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.11/commons-lang3-3.11.jar",
236+
"name":"commons-lang3 3.11",
237+
"src":"https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.11/commons-lang3-3.11-sources.jar"
238+
},
239+
{
240+
"jar":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-profile-impl/4.3.1/opensaml-profile-impl-4.3.1.jar",
241+
"name":"opensaml-profile-impl 4.3.1",
242+
"src":"https://build.shibboleth.net/nexus/content/repositories/releases/org/opensaml/opensaml-profile-impl/4.3.1/opensaml-profile-impl-4.3.1-sources.jar"
243+
},
104244
{
105245
"jar":"https://repo.maven.apache.org/maven2/ch/qos/logback/logback-core/1.5.18/logback-core-1.5.18.jar",
106246
"name":"logback-core 1.5.18",

pluginInterfaceSupported.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"_comment": "contains a list of plugin interfaces branch names that this core supports",
33
"versions": [
4-
"8.2"
4+
"8.3"
55
]
66
}

0 commit comments

Comments
 (0)