[java-sp-server] branch main updated: Some refactoring, add XML parsing endpoint for agent configs.
Scott Cantor
cantor.2 at osu.edu
Thu May 26 17:55:23 UTC 2022
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-sp-server.
View the commit online:
http://git.shibboleth.net/view/?p=java-sp-server.git;a=commit;h=acc018227e8aa8d6cf3fa8305d79722579eb98c9
The following commit(s) were added to refs/heads/main by this push:
new acc0182 Some refactoring, add XML parsing endpoint for agent configs.
acc0182 is described below
commit acc018227e8aa8d6cf3fa8305d79722579eb98c9
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu May 26 13:55:20 2022 -0400
Some refactoring, add XML parsing endpoint for agent configs.
---
.../net/shibboleth/sp/conf/endpoints-system.xml | 4 +-
.../shibboleth/sp/remoting/AbstractEndpoint.java | 55 ++++++++++
.../sp/remoting/{ => endpoint}/impl/Echo.java | 22 ++--
.../{impl/Echo.java => endpoint/impl/Ping.java} | 26 +++--
.../sp/remoting/endpoint/impl/XMLParser.java | 104 +++++++++++++++++++
.../Echo.java => endpoint/impl/package-info.java} | 24 +----
.../sp/remoting/endpoint/impl/XMLParserTest.java | 107 +++++++++++++++++++
.../sp/remoting/endpoint/impl/shibboleth2.xml | 115 +++++++++++++++++++++
8 files changed, 418 insertions(+), 39 deletions(-)
diff --git a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/endpoints-system.xml b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/endpoints-system.xml
index 440cdb9..f93f07a 100644
--- a/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/endpoints-system.xml
+++ b/sp-conf-impl/src/main/resources/net/shibboleth/sp/conf/endpoints-system.xml
@@ -25,7 +25,9 @@
<!-- Auto-wired remoting endpoints. -->
- <bean class="net.shibboleth.sp.remoting.impl.Echo" />
+ <bean class="net.shibboleth.sp.remoting.endpoint.impl.Echo" />
+ <bean class="net.shibboleth.sp.remoting.endpoint.impl.Ping" />
+ <bean class="net.shibboleth.sp.remoting.endpoint.impl.XMLParser" />
<!-- Wildcard import hook for plugins. -->
<import resource="classpath*:/META-INF/net/shibboleth/sp/service/provider/postconfig.xml" />
diff --git a/sp-server-api/src/main/java/net/shibboleth/sp/remoting/AbstractEndpoint.java b/sp-server-api/src/main/java/net/shibboleth/sp/remoting/AbstractEndpoint.java
new file mode 100644
index 0000000..2dbe6ef
--- /dev/null
+++ b/sp-server-api/src/main/java/net/shibboleth/sp/remoting/AbstractEndpoint.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package net.shibboleth.sp.remoting;
+
+import javax.annotation.Nonnull;
+
+import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
+import net.shibboleth.utilities.java.support.component.ComponentSupport;
+import net.shibboleth.utilities.java.support.ddf.DDF;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+
+/**
+ * Simple {@link Endpoint} implementation.
+ */
+public abstract class AbstractEndpoint extends AbstractInitializableComponent implements Endpoint {
+
+ /** {@inheritDoc} */
+ @Nonnull public DDF receive(@Nonnull final DDF input) throws RemoteProcessingException {
+ ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+ Constraint.isTrue(getAddress().equals(input.name()), "Address was invalid");
+
+ return doReceive(input);
+ }
+
+ /**
+ * Subclasses should override this method.
+ *
+ * <p>Implementations of this method should catch any checked exceptions and wrap them
+ * in the {@link RemoteProcessingException} type.</p>
+ *
+ * <p>Unchecked exceptions MAY be surfaced safely and will be caught by the standard error
+ * handling, so they should be processed internally if that is not the desired behavior.</p>
+ *
+ * @param input input message
+ *
+ * @return output message
+ *
+ * @throws RemoteProcessingException if an exception occurs
+ */
+ @Nonnull abstract public DDF doReceive(@Nonnull final DDF input) throws RemoteProcessingException;
+
+}
\ No newline at end of file
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/Echo.java b/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/endpoint/impl/Echo.java
similarity index 60%
copy from sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/Echo.java
copy to sp-server-impl/src/main/java/net/shibboleth/sp/remoting/endpoint/impl/Echo.java
index 1876005..230735a 100644
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/Echo.java
+++ b/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/endpoint/impl/Echo.java
@@ -13,26 +13,34 @@
*/
-package net.shibboleth.sp.remoting.impl;
+package net.shibboleth.sp.remoting.endpoint.impl;
import net.shibboleth.sp.remoting.RemoteProcessingException;
-import net.shibboleth.sp.remoting.Endpoint;
+
+import javax.annotation.Nonnull;
+
+import net.shibboleth.sp.remoting.AbstractEndpoint;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
import net.shibboleth.utilities.java.support.ddf.DDF;
/**
* Echo service endpoint.
*
- * <p>This bean just echoes the input as the output for validation/testing.
+ * <p>This bean just echoes the input as the output for validation/testing.</p>
*/
-public class Echo implements Endpoint {
+public class Echo extends AbstractEndpoint {
+
+ /** Address. */
+ @Nonnull @NotEmpty public static final String ADDRESS = "net.shibboleth.sp.Echo";
/** {@inheritDoc} */
- public String getAddress() {
- return "echo";
+ @Nonnull @NotEmpty public String getAddress() {
+ return ADDRESS;
}
/** {@inheritDoc} */
- public DDF receive(DDF input) throws RemoteProcessingException {
+ @Override
+ @Nonnull public DDF doReceive(@Nonnull final DDF input) throws RemoteProcessingException {
return input;
}
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/Echo.java b/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/endpoint/impl/Ping.java
similarity index 51%
copy from sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/Echo.java
copy to sp-server-impl/src/main/java/net/shibboleth/sp/remoting/endpoint/impl/Ping.java
index 1876005..4321b7b 100644
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/Echo.java
+++ b/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/endpoint/impl/Ping.java
@@ -13,27 +13,35 @@
*/
-package net.shibboleth.sp.remoting.impl;
+package net.shibboleth.sp.remoting.endpoint.impl;
import net.shibboleth.sp.remoting.RemoteProcessingException;
-import net.shibboleth.sp.remoting.Endpoint;
+
+import javax.annotation.Nonnull;
+
+import net.shibboleth.sp.remoting.AbstractEndpoint;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
import net.shibboleth.utilities.java.support.ddf.DDF;
/**
- * Echo service endpoint.
+ * Ping service endpoint.
*
- * <p>This bean just echoes the input as the output for validation/testing.
+ * <p>This bean just returns the server time.</p>
*/
-public class Echo implements Endpoint {
+public class Ping extends AbstractEndpoint {
+
+ /** Address. */
+ @Nonnull @NotEmpty public static final String ADDRESS = "net.shibboleth.sp.Ping";
/** {@inheritDoc} */
- public String getAddress() {
- return "echo";
+ @Nonnull @NotEmpty public String getAddress() {
+ return ADDRESS;
}
/** {@inheritDoc} */
- public DDF receive(DDF input) throws RemoteProcessingException {
- return input;
+ @Override
+ @Nonnull public DDF doReceive(@Nonnull final DDF input) throws RemoteProcessingException {
+ return new DDF("pong").longinteger(System.currentTimeMillis() / 1000);
}
}
\ No newline at end of file
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/endpoint/impl/XMLParser.java b/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/endpoint/impl/XMLParser.java
new file mode 100644
index 0000000..faae3e2
--- /dev/null
+++ b/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/endpoint/impl/XMLParser.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package net.shibboleth.sp.remoting.endpoint.impl;
+
+import net.shibboleth.sp.remoting.RemoteProcessingException;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.annotation.Nonnull;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+
+import net.shibboleth.sp.remoting.AbstractEndpoint;
+import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.component.ComponentSupport;
+import net.shibboleth.utilities.java.support.ddf.DDF;
+import net.shibboleth.utilities.java.support.ddf.DDFSupport;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.xml.ParserPool;
+import net.shibboleth.utilities.java.support.xml.XMLParserException;
+
+/**
+ * Parses XML into a DDF for agent consumption.
+ *
+ * <p>The input must be an "unsafe" string.</p>
+ *
+ * <p>This converter is NOT namespace aware.</p>
+ */
+public class XMLParser extends AbstractEndpoint {
+
+ /** Address. */
+ @Nonnull @NotEmpty public static final String ADDRESS = "net.shibboleth.sp.XMLParser";
+
+ /** Class logger. */
+ @Nonnull private final Logger log = LoggerFactory.getLogger(XMLParser.class);
+
+ /** Parser pool. */
+ @NonnullAfterInit private ParserPool parserPool;
+
+ /** {@inheritDoc} */
+ @Nonnull @NotEmpty public String getAddress() {
+ return ADDRESS;
+ }
+
+ /**
+ * Set the {@link ParserPool} instance to use.
+ *
+ * @param parser parser pool
+ */
+ public void setParserPool(@Nonnull final ParserPool parser) {
+ ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+
+ parserPool = Constraint.isNotNull(parser, "ParserPool cannot be null");
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected void doInitialize() throws ComponentInitializationException {
+ super.doInitialize();
+
+ if (parserPool == null) {
+ throw new ComponentInitializationException("ParserPool cannot be null");
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ @Nonnull public DDF doReceive(@Nonnull final DDF input) throws RemoteProcessingException {
+
+ if (!input.isunsafestring()) {
+ throw new IllegalArgumentException("Input was not an unsafe string");
+ }
+
+ try (final InputStream data = new ByteArrayInputStream(input.unsafe_string())) {
+ final Document doc = parserPool.parse(data);
+ final DDF output = new DDF("xml").structure();
+ output.add(DDFSupport.fromElement(doc.getDocumentElement()));
+ return output;
+ } catch (final IOException | XMLParserException e) {
+ log.warn("Unable to parse supplied XML", e);
+ throw new RemoteProcessingException(e);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/Echo.java b/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/endpoint/impl/package-info.java
similarity index 50%
rename from sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/Echo.java
rename to sp-server-impl/src/main/java/net/shibboleth/sp/remoting/endpoint/impl/package-info.java
index 1876005..d92a1ce 100644
--- a/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/impl/Echo.java
+++ b/sp-server-impl/src/main/java/net/shibboleth/sp/remoting/endpoint/impl/package-info.java
@@ -12,28 +12,8 @@
* limitations under the License.
*/
-
-package net.shibboleth.sp.remoting.impl;
-
-import net.shibboleth.sp.remoting.RemoteProcessingException;
-import net.shibboleth.sp.remoting.Endpoint;
-import net.shibboleth.utilities.java.support.ddf.DDF;
-
/**
- * Echo service endpoint.
- *
- * <p>This bean just echoes the input as the output for validation/testing.
+ * {@link Endpoint} implementations.
*/
-public class Echo implements Endpoint {
-
- /** {@inheritDoc} */
- public String getAddress() {
- return "echo";
- }
-
- /** {@inheritDoc} */
- public DDF receive(DDF input) throws RemoteProcessingException {
- return input;
- }
-}
\ No newline at end of file
+package net.shibboleth.sp.remoting.endpoint.impl;
\ No newline at end of file
diff --git a/sp-server-impl/src/test/java/net/shibboleth/sp/remoting/endpoint/impl/XMLParserTest.java b/sp-server-impl/src/test/java/net/shibboleth/sp/remoting/endpoint/impl/XMLParserTest.java
new file mode 100644
index 0000000..b73d5e3
--- /dev/null
+++ b/sp-server-impl/src/test/java/net/shibboleth/sp/remoting/endpoint/impl/XMLParserTest.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements. See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.shibboleth.sp.remoting.endpoint.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.annotation.Nullable;
+
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import net.shibboleth.sp.remoting.RemoteProcessingException;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.ddf.DDF;
+import net.shibboleth.utilities.java.support.xml.BasicParserPool;
+import net.shibboleth.utilities.java.support.xml.XMLParserException;
+
+/**
+ * Unit test for {@link XMLParser}.
+ */
+public class XMLParserTest {
+
+ @Nullable private BasicParserPool parserPool;
+
+ @Nullable private XMLParser endpoint;
+
+ /**
+ * Init parser.
+ *
+ * @throws ComponentInitializationException
+ */
+ @BeforeClass
+ public void setUp() throws ComponentInitializationException {
+ parserPool = new BasicParserPool();
+ parserPool.initialize();
+
+ endpoint = new XMLParser();
+ endpoint.setParserPool(parserPool);
+ endpoint.initialize();
+ }
+
+ /**
+ * Teardown.
+ */
+ @AfterClass
+ public void tearDown() {
+ endpoint.destroy();
+ parserPool.destroy();
+ }
+
+ /**
+ * Test bad input type.
+ *
+ * @throws RemoteProcessingException
+ */
+ @Test(expectedExceptions=IllegalArgumentException.class)
+ public void badInput() throws RemoteProcessingException {
+ endpoint.receive(new DDF(XMLParser.ADDRESS).string("foo"));
+ }
+
+ /**
+ * Test bad XML.
+ *
+ * @throws RemoteProcessingException
+ */
+ @Test(expectedExceptions=RemoteProcessingException.class)
+ public void badXML() throws RemoteProcessingException {
+ endpoint.receive(new DDF(XMLParser.ADDRESS).unsafe_string("<foo".getBytes()));
+ }
+
+ /**
+ * Test conversion.
+ *
+ * @throws IOException
+ * @throws XMLParserException
+ * @throws RemoteProcessingException
+ */
+ @Test
+ public void success() throws XMLParserException, IOException, RemoteProcessingException {
+ try (final InputStream source = getClass().getResourceAsStream("shibboleth2.xml")) {
+ final DDF obj = endpoint.receive(new DDF(XMLParser.ADDRESS).unsafe_string(source.readAllBytes()));
+
+ Assert.assertTrue(obj.isstruct());
+ Assert.assertEquals(obj.name(), "xml");
+ Assert.assertTrue(obj.getmember("SPConfig").isstruct());
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/sp-server-impl/src/test/resources/net/shibboleth/sp/remoting/endpoint/impl/shibboleth2.xml b/sp-server-impl/src/test/resources/net/shibboleth/sp/remoting/endpoint/impl/shibboleth2.xml
new file mode 100644
index 0000000..cbe08c0
--- /dev/null
+++ b/sp-server-impl/src/test/resources/net/shibboleth/sp/remoting/endpoint/impl/shibboleth2.xml
@@ -0,0 +1,115 @@
+<SPConfig xmlns="urn:mace:shibboleth:3.0:native:sp:config"
+ xmlns:conf="urn:mace:shibboleth:3.0:native:sp:config"
+ clockSkew="180">
+
+ <OutOfProcess tranLogFormat="%u|%s|%IDP|%i|%ac|%t|%attr|%n|%b|%E|%S|%SS|%L|%UA|%a" />
+
+ <!--
+ By default, in-memory StorageService, ReplayCache, ArtifactMap, and SessionCache
+ are used. See example-shibboleth2.xml for samples of explicitly configuring them.
+ -->
+
+ <!-- The ApplicationDefaults element is where most of Shibboleth's SAML bits are defined. -->
+ <ApplicationDefaults entityID="https://sp.example.org/shibboleth"
+ REMOTE_USER="eppn subject-id pairwise-id persistent-id"
+ cipherSuites="DEFAULT:!EXP:!LOW:!aNULL:!eNULL:!DES:!IDEA:!SEED:!RC4:!3DES:!kRSA:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1">
+
+ <!--
+ Controls session lifetimes, address checks, cookie handling, and the protocol handlers.
+ Each Application has an effectively unique handlerURL, which defaults to "/Shibboleth.sso"
+ and should be a relative path, with the SP computing the full value based on the virtual
+ host. Use of TLS is now assumed because browsers are enforcing it due to SameSite
+ restrictions. Note that while we default checkAddress to "false", this makes an assertion
+ stolen in transit easier for attackers to misuse.
+ -->
+ <Sessions lifetime="28800" timeout="3600" relayState="ss:mem"
+ checkAddress="false" handlerSSL="true" cookieProps="https"
+ redirectLimit="exact">
+
+ <!--
+ Configures SSO for a default IdP. To properly allow for >1 IdP, remove
+ entityID property and adjust discoveryURL to point to discovery service.
+ You can also override entityID on /Login query string, or in RequestMap/htaccess.
+ -->
+ <SSO entityID="https://idp.example.org/idp/shibboleth"
+ discoveryProtocol="SAMLDS" discoveryURL="https://ds.example.org/DS/WAYF">
+ SAML2
+ </SSO>
+
+ <!-- SAML and local-only logout. -->
+ <Logout>SAML2 Local</Logout>
+
+ <!-- Administrative logout. -->
+ <LogoutInitiator type="Admin" Location="/Logout/Admin" acl="127.0.0.1 ::1" />
+
+ <!-- Extension service that generates "approximate" metadata based on SP configuration. -->
+ <Handler type="MetadataGenerator" Location="/Metadata" signing="false"/>
+
+ <!-- Status reporting service. -->
+ <Handler type="Status" Location="/Status" acl="127.0.0.1 ::1"/>
+
+ <!-- Session diagnostic service. -->
+ <Handler type="Session" Location="/Session" showAttributeValues="false"/>
+
+ <!-- JSON feed of discovery information. -->
+ <Handler type="DiscoveryFeed" Location="/DiscoFeed"/>
+ </Sessions>
+
+ <!--
+ Allows overriding of error template information/filenames. You can
+ also add your own attributes with values that can be plugged into the
+ templates, e.g., helpLocation below.
+ -->
+ <Errors supportContact="root at localhost"
+ helpLocation="/about.html"
+ styleSheet="/shibboleth-sp/main.css"/>
+
+ <!-- Example of locally maintained metadata. -->
+ <!--
+ <MetadataProvider type="XML" validate="true" path="partner-metadata.xml"/>
+ -->
+
+ <!-- Example of remotely supplied batch of signed metadata. -->
+ <!--
+ <MetadataProvider type="XML" validate="true"
+ url="http://federation.org/federation-metadata.xml"
+ backingFilePath="federation-metadata.xml" maxRefreshDelay="7200">
+ <MetadataFilter type="RequireValidUntil" maxValidityInterval="2419200"/>
+ <MetadataFilter type="Signature" certificate="fedsigner.pem" verifyBackup="false"/>
+ <DiscoveryFilter type="Blacklist" matcher="EntityAttributes" trimTags="true"
+ attributeName="http://macedir.org/entity-category"
+ attributeNameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+ attributeValue="http://refeds.org/category/hide-from-discovery" />
+ </MetadataProvider>
+ -->
+
+ <!-- Example of remotely supplied "on-demand" signed metadata. -->
+ <!--
+ <MetadataProvider type="MDQ" validate="true" cacheDirectory="mdq"
+ baseUrl="http://mdq.federation.org" ignoreTransport="true">
+ <MetadataFilter type="RequireValidUntil" maxValidityInterval="2419200"/>
+ <MetadataFilter type="Signature" certificate="mdqsigner.pem" />
+ </MetadataProvider>
+ -->
+
+ <!-- Map to extract attributes from SAML assertions. -->
+ <AttributeExtractor type="XML" validate="true" reloadChanges="false" path="attribute-map.xml"/>
+
+ <!-- Default filtering policy for recognized attributes, lets other data pass. -->
+ <AttributeFilter type="XML" validate="true" path="attribute-policy.xml"/>
+
+ <!-- Simple file-based resolvers for separate signing/encryption keys. -->
+ <CredentialResolver type="File" use="signing"
+ key="sp-signing-key.pem" certificate="sp-signing-cert.pem"/>
+ <CredentialResolver type="File" use="encryption"
+ key="sp-encrypt-key.pem" certificate="sp-encrypt-cert.pem"/>
+
+ </ApplicationDefaults>
+
+ <!-- Policies that determine how to process and authenticate runtime messages. -->
+ <SecurityPolicyProvider type="XML" validate="true" path="security-policy.xml"/>
+
+ <!-- Low-level configuration about protocols and bindings available for use. -->
+ <ProtocolProvider type="XML" validate="true" reloadChanges="false" path="protocols.xml"/>
+
+</SPConfig>
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list