[java-oidc-common] branch dev/JCOMOIDC-66 updated: Update logic functions and predicates to point to API interfaces

Phil Smart philip.smart at jisc.ac.uk
Wed Mar 22 15:07:17 UTC 2023


This is an automated email from the git hooks/post-receive script.

philsmart pushed a commit to branch dev/JCOMOIDC-66
in repository java-oidc-common.

View the commit online:
http://git.shibboleth.net/view/?p=java-oidc-common.git;a=commit;h=b929e95d5cbdb275bdd5c224f34c2f020ae5f7a4

The following commit(s) were added to refs/heads/dev/JCOMOIDC-66 by this push:
     new b929e95  Update logic functions and predicates to point to API interfaces
b929e95 is described below

commit b929e95d5cbdb275bdd5c224f34c2f020ae5f7a4
Author: Phil Smart <philip.smart at jisc.ac.uk>
AuthorDate: Wed Mar 22 15:07:10 2023 +0000

    Update logic functions and predicates to point to API interfaces
    
     - Over the concrete implementations
---
 oidc-common-crypto-api/pom.xml                     |  6 ++-
 .../credential}/BasicJWKCredentialFactoryBean.java |  3 +-
 .../impl/BaseJWTSignatureSecurityHandler.java      |  8 ++--
 .../oidc/security/impl/AbstractHandlerTest.java    | 31 +-------------
 .../config/OIDCUserInfoProfileConfiguration.java   |  2 -
 .../config/logic/AllowPKCEPlainPredicate.java      | 10 +++--
 .../AuthorizationCodeFlowEnabledPredicate.java     |  3 +-
 .../config/logic/EncodeConsentPredicate.java       |  9 +++--
 .../logic/EncryptRequestObjectPredicate.java       |  6 +--
 .../config/logic/EncryptionOptionalPredicate.java  | 16 +++-----
 .../EnforceRefreshTokenRotationPredicate.java      |  9 +++--
 .../profile/config/logic/ForcePKCEPredicate.java   |  9 +++--
 .../config/logic/HybridFlowEnabledPredicate.java   | 10 +++--
 .../config/logic/ImplicitFlowEnabledPredicate.java |  9 +++--
 ...udeIssuerInAuthenticationResponsePredicate.java |  9 +++--
 .../logic/RefreshTokensEnabledPredicate.java       |  9 +++--
 .../config/logic/SignRequestObjectPredicate.java   |  6 +--
 ...laimsSetManipulationStrategyLookupFunction.java | 11 +++--
 .../AccessTokenLifetimeLookupFunction.java         | 10 ++---
 .../navigate/AccessTokenTypeLookupFunction.java    | 10 ++---
 .../AcrClaimAlwaysEssentialLookupFunction.java     | 11 ++---
 .../AlwaysIncludedAttributesLookupFunction.java    |  7 ++--
 .../AudienceRestrictionsLookupFunction.java        | 14 ++++---
 ...laimsSetManipulationStrategyLookupFunction.java | 11 +++--
 .../navigate/AuthzCodeLifetimeLookupFunction.java  |  9 +++--
 .../navigate/ClaimsValidatorLookupFunction.java    |  9 +++--
 ...ClientInformationStringValueLookupFunction.java |  4 +-
 .../DeniedUserInfoAttributesLookupFunction.java    | 17 ++++----
 .../navigate/EncodedAttributesLookupFunction.java  |  9 +++--
 .../navigate/IDTokenLifetimeLookupFunction.java    |  9 +++--
 .../IDTokenManipulationStrategyLookupFunction.java |  9 +++--
 .../IssuedClaimsValidatorLookupFunction.java       |  9 +++--
 ...laimsSetManipulationStrategyLookupFunction.java |  9 +++--
 .../RefreshTokenLifetimeLookupFunction.java        |  9 +++--
 .../RegistrationMetadataPolicyLookupFunction.java  |  9 +++--
 .../RegistrationValidityPeriodLookupFunction.java  |  9 +++--
 .../navigate/RevocationLifetimeLookupFunction.java | 12 +++---
 .../navigate/RevocationMethodLookupFunction.java   | 11 ++---
 .../SecretExpirationPeriodLookupFunction.java      |  9 +++--
 .../TokenEndpointAuthMethodLookupFunction.java     |  9 +++--
 oidc-common-profile-impl/pom.xml                   |  5 ---
 .../config/impl/OIDCUserInfoConfiguration.java     |  1 +
 .../oidc/profile/config/impl/TestInterfaces.java   |  9 ++---
 .../impl}/OIDCCoreProtocolConfigurationTest.java   |  6 +--
 .../FormOutboundKeySetResponseMessageTest.java     | 47 ++++++++++++++++++++--
 .../OAuth2TokenRevocationConfigurationTest.java    |  2 +-
 46 files changed, 242 insertions(+), 209 deletions(-)

diff --git a/oidc-common-crypto-api/pom.xml b/oidc-common-crypto-api/pom.xml
index 5f04f97..899ad52 100644
--- a/oidc-common-crypto-api/pom.xml
+++ b/oidc-common-crypto-api/pom.xml
@@ -34,7 +34,11 @@
             <artifactId>oauth2-oidc-sdk</artifactId>
             <scope>compile</scope>
         </dependency>
-
+        <dependency>
+            <groupId>${idp.groupId}</groupId>
+            <artifactId>idp-profile-spring</artifactId>
+            <scope>provided</scope>
+        </dependency>
         <dependency>
             <groupId>com.nimbusds</groupId>
             <artifactId>nimbus-jose-jwt</artifactId>
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/BasicJWKCredentialFactoryBean.java b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicJWKCredentialFactoryBean.java
similarity index 97%
rename from oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/BasicJWKCredentialFactoryBean.java
rename to oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicJWKCredentialFactoryBean.java
index 19b60c3..2c7b80d 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/credential/impl/BasicJWKCredentialFactoryBean.java
+++ b/oidc-common-crypto-api/src/main/java/net/shibboleth/oidc/security/credential/BasicJWKCredentialFactoryBean.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.oidc.security.credential.impl;
+package net.shibboleth.oidc.security.credential;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -39,7 +39,6 @@ import com.nimbusds.jose.jwk.OctetSequenceKey;
 
 import net.shibboleth.idp.profile.spring.factory.AbstractCredentialFactoryBean;
 import net.shibboleth.oidc.security.CredentialConversionUtil;
-import net.shibboleth.oidc.security.credential.BasicJWKCredential;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseJWTSignatureSecurityHandler.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseJWTSignatureSecurityHandler.java
index c9f5347..ed637a6 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseJWTSignatureSecurityHandler.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseJWTSignatureSecurityHandler.java
@@ -39,7 +39,7 @@ import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
 
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
-import net.shibboleth.oidc.profile.config.impl.OIDCAuthorizationConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2ClientAuthenticableProfileConfiguration;
 import net.shibboleth.oidc.security.credential.ClientSecretCredential;
 import net.shibboleth.oidc.security.jose.context.SecurityParametersContext;
 import net.shibboleth.oidc.security.jose.criterion.ClientInformationCriterion;
@@ -93,7 +93,7 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
     @Nonnull private Function<MessageContext,SecurityParametersContext> securityParametersContextLookupStrategy;
     
     /** Applicable stashed profile configuration. */
-    @Nullable private OIDCAuthorizationConfiguration profileConfiguration;
+    @Nullable private OAuth2ClientAuthenticableProfileConfiguration profileConfiguration;
     
     /** The provider metadata found from the lookup strategy.*/
     @Nullable protected OIDCProviderMetadata providerMetadata;
@@ -184,8 +184,8 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
         
         final RelyingPartyContext rpCtx = adapt(relyingPartyContextLookupStrategy).apply(messageContext);     
         if (rpCtx != null && rpCtx.getConfiguration() != null &&
-                rpCtx.getProfileConfig() instanceof OIDCAuthorizationConfiguration) {
-            profileConfiguration = (OIDCAuthorizationConfiguration) rpCtx.getProfileConfig();
+                rpCtx.getProfileConfig() instanceof OAuth2ClientAuthenticableProfileConfiguration) {
+            profileConfiguration = (OAuth2ClientAuthenticableProfileConfiguration) rpCtx.getProfileConfig();
         }
 
         return true;
diff --git a/oidc-common-crypto-impl/src/test/java/net/shibboleth/oidc/security/impl/AbstractHandlerTest.java b/oidc-common-crypto-impl/src/test/java/net/shibboleth/oidc/security/impl/AbstractHandlerTest.java
index 641584f..3b65127 100644
--- a/oidc-common-crypto-impl/src/test/java/net/shibboleth/oidc/security/impl/AbstractHandlerTest.java
+++ b/oidc-common-crypto-impl/src/test/java/net/shibboleth/oidc/security/impl/AbstractHandlerTest.java
@@ -17,30 +17,16 @@
 
 package net.shibboleth.oidc.security.impl;
 
-import java.util.Set;
-
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.springframework.webflow.execution.RequestContext;
 
 import net.shibboleth.idp.authn.context.AuthenticationContext;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.idp.relyingparty.RelyingPartyConfiguration;
-import net.shibboleth.oidc.security.impl.support.TestCredentialHelper;
 
 /** Abstract class for tests that require context setup appropriate for message handlers.*/
 public abstract class AbstractHandlerTest {
-    
-    /** A redirect_uri override.*/
-    private static final String REDIRECT_URI_OVERRIDE = "https://localhost/callback";
-    
-    /** The client_id.*/
-    private static final String CLIENT_ID = "demo_rp";
-    
-    /** The client_secret.*/
-    private static final String CLIENT_SECRET = "Xp2s5v8y/B?E(H+MbQeThWmYq3t6w9z$";
 
     /** The root profile request context to use.*/
     protected ProfileRequestContext rootPrc;
@@ -53,9 +39,6 @@ public abstract class AbstractHandlerTest {
     
     /** The authentication context (above the nested prc).*/
     protected AuthenticationContext ac;
-    
-    /** The RP config.*/
-    protected OIDCAuthorizationConfiguration partyConfig;
 
     /** 
      * Setup the various contexts.
@@ -77,19 +60,7 @@ public abstract class AbstractHandlerTest {
         
         final MessageContext outMsgCtx = new MessageContext();      
         prc.setOutboundMessageContext(outMsgCtx);      
-        
-        final RelyingPartyContext partyContext = new RelyingPartyContext();
-        partyConfig = new OIDCAuthorizationConfiguration();  
-        partyContext.setProfileConfig(partyConfig);
-        partyConfig.setClientCredential(TestCredentialHelper.createClientSecretCredential(CLIENT_SECRET));
-        partyConfig.setTokenEndpointAuthMethods(Set.of("client_secret_basic"));
-        partyConfig.setClientId(CLIENT_ID);
-        partyConfig.setRedirectUriOverride(REDIRECT_URI_OVERRIDE);
-        final RelyingPartyConfiguration rPartyConfig = new RelyingPartyConfiguration();
-        rPartyConfig.setResponderId("http://idp.example.com/");
-        partyContext.setConfiguration(rPartyConfig);
-        prc.addSubcontext(partyContext);
-        
+
 
     }
 
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/OIDCUserInfoProfileConfiguration.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/OIDCUserInfoProfileConfiguration.java
index c5fa918..097ba68 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/OIDCUserInfoProfileConfiguration.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/OIDCUserInfoProfileConfiguration.java
@@ -31,8 +31,6 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 /**
  * Configuration for an OpenID Connect core protocol UserInfo endpoint.
  */
-
-//TODO encryption settings move out of extends OIDCSSOProfileConfiguration 
 public interface OIDCUserInfoProfileConfiguration extends OIDCTokenEncryptionProfileConfiguration {
     
     /** OIDC base protocol URI. */
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/AllowPKCEPlainPredicate.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/AllowPKCEPlainPredicate.java
index a2fc00e..99933d0 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/AllowPKCEPlainPredicate.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/AllowPKCEPlainPredicate.java
@@ -24,21 +24,23 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
-import net.shibboleth.oidc.profile.config.impl.AbstractOIDCSSOConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCSSOProfileConfiguration;
+
 
 /**
  * A predicate implementation that forwards to
- * {@link AbstractOIDCSSOConfiguration#isAllowPKCEPlain(ProfileRequestContext)}.
+ * {@link OIDCSSOProfileConfiguration#isAllowPKCEPlain(ProfileRequestContext)}.
  */
 public class AllowPKCEPlainPredicate extends AbstractRelyingPartyPredicate {
     
     /** {@inheritDoc} */
+    @Override
     public boolean test(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOIDCSSOConfiguration) {
-                return ((AbstractOIDCSSOConfiguration) pc).isAllowPKCEPlain(input);
+            if (pc instanceof OIDCSSOProfileConfiguration) {
+                return ((OIDCSSOProfileConfiguration) pc).isAllowPKCEPlain(input);
             }
         }
         return false;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/AuthorizationCodeFlowEnabledPredicate.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/AuthorizationCodeFlowEnabledPredicate.java
index d60bd54..878117c 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/AuthorizationCodeFlowEnabledPredicate.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/AuthorizationCodeFlowEnabledPredicate.java
@@ -25,11 +25,10 @@ import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.oidc.profile.oauth2.config.OAuth2FlowAwareProfileConfiguration;
-import net.shibboleth.oidc.profile.oauth2.config.impl.AbstractOAuth2FlowAwareProfileConfiguration;
 
 /**
  * A predicate implementation that forwards to {@link
- * AbstractOAuth2FlowAwareProfileConfiguration#isAuthorizationCodeFlowEnabled(ProfileRequestContext)}.
+ * OAuth2FlowAwareProfileConfiguration#isAuthorizationCodeFlowEnabled(ProfileRequestContext)}.
  */
 public class AuthorizationCodeFlowEnabledPredicate extends AbstractRelyingPartyPredicate {
     
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EncodeConsentPredicate.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EncodeConsentPredicate.java
index 253d2c9..fc7984a 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EncodeConsentPredicate.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EncodeConsentPredicate.java
@@ -24,21 +24,22 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
-import net.shibboleth.oidc.profile.config.impl.OIDCAuthorizationConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCAuthenticationProviderProfileConfiguration;
 
 /**
  * A predicate implementation that forwards to
- * {@link OIDCAuthorizationConfiguration#isEncodeConsentInTokens(ProfileRequestContext)}.
+ * {@link OIDCAuthenticationProviderProfileConfiguration#isEncodeConsentInTokens(ProfileRequestContext)}.
  */
 public class EncodeConsentPredicate extends AbstractRelyingPartyPredicate {
     
     /** {@inheritDoc} */
+    @Override
     public boolean test(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OIDCAuthorizationConfiguration) {
-                return ((OIDCAuthorizationConfiguration) pc).isEncodeConsentInTokens(input);
+            if (pc instanceof OIDCAuthenticationProviderProfileConfiguration) {
+                return ((OIDCAuthenticationProviderProfileConfiguration) pc).isEncodeConsentInTokens(input);
             }
         }
         return false;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EncryptRequestObjectPredicate.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EncryptRequestObjectPredicate.java
index c14e39a..a722e1c 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EncryptRequestObjectPredicate.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EncryptRequestObjectPredicate.java
@@ -24,7 +24,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
-import net.shibboleth.oidc.profile.config.impl.OIDCAuthorizationConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCAuthenticationRelyingPartyProfileConfiguration;
 
 /** A predicate that determines if the RequestObject JWT should be encrypted based on the profile configuration.*/
 public class EncryptRequestObjectPredicate extends AbstractRelyingPartyPredicate {
@@ -35,8 +35,8 @@ public class EncryptRequestObjectPredicate extends AbstractRelyingPartyPredicate
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OIDCAuthorizationConfiguration) {
-                return ((OIDCAuthorizationConfiguration) pc).isEncryptRequestObject(input);
+            if (pc instanceof OIDCAuthenticationRelyingPartyProfileConfiguration) {
+                return ((OIDCAuthenticationRelyingPartyProfileConfiguration) pc).isEncryptRequestObject(input);
             }
         }
         return false;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EncryptionOptionalPredicate.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EncryptionOptionalPredicate.java
index 9f930df..119e79a 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EncryptionOptionalPredicate.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EncryptionOptionalPredicate.java
@@ -24,28 +24,22 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
-import net.shibboleth.oidc.profile.config.impl.AbstractOIDCSSOConfiguration;
-import net.shibboleth.oidc.profile.config.impl.OIDCUserInfoConfiguration;
-import net.shibboleth.oidc.profile.oauth2.config.impl.OAuth2TokenAudienceConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCEncryptedTokenProfileConfiguration;
 
 /**
  * A predicate implementation that forwards to
- * {@link AbstractOIDCSSOConfiguration#isEncryptionOptional(ProfileRequestContext)} or
- * {@link OIDCUserInfoConfiguration#isEncryptionOptional(ProfileRequestContext)}.
+ * {@link OIDCEncryptedTokenProfileConfiguration#isEncryptionOptional(ProfileRequestContext)}.
  */
 public class EncryptionOptionalPredicate extends AbstractRelyingPartyPredicate {
     
     /** {@inheritDoc} */
+    @Override
     public boolean test(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOIDCSSOConfiguration) {
-                return ((AbstractOIDCSSOConfiguration) pc).isEncryptionOptional(input);
-            } else if (pc instanceof OIDCUserInfoConfiguration) {
-                return ((OIDCUserInfoConfiguration) pc).isEncryptionOptional(input);
-            } else if (pc instanceof OAuth2TokenAudienceConfiguration) {
-                return ((OAuth2TokenAudienceConfiguration) pc).isEncryptionOptional(input);
+            if (pc instanceof OIDCEncryptedTokenProfileConfiguration) {
+                return ((OIDCEncryptedTokenProfileConfiguration) pc).isEncryptionOptional(input);
             }
         }
         return false;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EnforceRefreshTokenRotationPredicate.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EnforceRefreshTokenRotationPredicate.java
index 7304c9f..b5bf360 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EnforceRefreshTokenRotationPredicate.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/EnforceRefreshTokenRotationPredicate.java
@@ -24,21 +24,22 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
-import net.shibboleth.oidc.profile.oauth2.config.impl.OAuth2TokenConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2TokenProfileConfiguration;
 
 /**
  * A predicate implementation that forwards to
- * {@link OAuth2TokenConfiguration#isEnforceRefreshTokenRotation(ProfileRequestContext)}.
+ * {@link OAuth2TokenProfileConfiguration#isEnforceRefreshTokenRotation(ProfileRequestContext)}.
  */
 public class EnforceRefreshTokenRotationPredicate extends AbstractRelyingPartyPredicate {
     
     /** {@inheritDoc} */
+    @Override
     public boolean test(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OAuth2TokenConfiguration) {
-                return ((OAuth2TokenConfiguration) pc).isEnforceRefreshTokenRotation(input);
+            if (pc instanceof OAuth2TokenProfileConfiguration) {
+                return ((OAuth2TokenProfileConfiguration) pc).isEnforceRefreshTokenRotation(input);
             }
         }
         return false;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/ForcePKCEPredicate.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/ForcePKCEPredicate.java
index 3996bdc..0f1a1ed 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/ForcePKCEPredicate.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/ForcePKCEPredicate.java
@@ -24,20 +24,21 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
-import net.shibboleth.oidc.profile.config.impl.AbstractOIDCSSOConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCSSOProfileConfiguration;
 
 /**
- * A predicate implementation that forwards to {@link AbstractOIDCSSOConfiguration#isForcePKCE(ProfileRequestContext)}.
+ * A predicate implementation that forwards to {@link OIDCSSOProfileConfiguration#isForcePKCE(ProfileRequestContext)}.
  */
 public class ForcePKCEPredicate extends AbstractRelyingPartyPredicate {
     
     /** {@inheritDoc} */
+    @Override
     public boolean test(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOIDCSSOConfiguration) {
-                return ((AbstractOIDCSSOConfiguration) pc).isForcePKCE(input);
+            if (pc instanceof OIDCSSOProfileConfiguration) {
+                return ((OIDCSSOProfileConfiguration) pc).isForcePKCE(input);
             }
         }
         return false;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/HybridFlowEnabledPredicate.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/HybridFlowEnabledPredicate.java
index 6b53581..1ef3e54 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/HybridFlowEnabledPredicate.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/HybridFlowEnabledPredicate.java
@@ -24,21 +24,23 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
-import net.shibboleth.oidc.profile.oauth2.config.impl.AbstractOAuth2FlowAwareProfileConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCFlowAwareProfileConfiguration;
+
 
 /**
  * A predicate implementation that forwards to
- * {@link AbstractOAuth2FlowAwareProfileConfiguration#isHybridFlowEnabled(ProfileRequestContext)}.
+ * {@link OIDCFlowAwareProfileConfiguration#isHybridFlowEnabled(ProfileRequestContext)}.
  */
 public class HybridFlowEnabledPredicate extends AbstractRelyingPartyPredicate {
     
     /** {@inheritDoc} */
+    @Override
     public boolean test(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOAuth2FlowAwareProfileConfiguration) {
-                return ((AbstractOAuth2FlowAwareProfileConfiguration) pc).isHybridFlowEnabled(input);
+            if (pc instanceof OIDCFlowAwareProfileConfiguration) {
+                return ((OIDCFlowAwareProfileConfiguration) pc).isHybridFlowEnabled(input);
             }
         }
         return false;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/ImplicitFlowEnabledPredicate.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/ImplicitFlowEnabledPredicate.java
index f4bbc7e..a173f88 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/ImplicitFlowEnabledPredicate.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/ImplicitFlowEnabledPredicate.java
@@ -24,21 +24,22 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
-import net.shibboleth.oidc.profile.oauth2.config.impl.AbstractOAuth2FlowAwareProfileConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2FlowAwareProfileConfiguration;
 
 /**
  * A predicate implementation that forwards to
- * {@link AbstractOAuth2FlowAwareProfileConfiguration#isImplicitFlowEnabled(ProfileRequestContext)}.
+ * {@link OAuth2FlowAwareProfileConfiguration#isImplicitFlowEnabled(ProfileRequestContext)}.
  */
 public class ImplicitFlowEnabledPredicate extends AbstractRelyingPartyPredicate {
     
     /** {@inheritDoc} */
+    @Override
     public boolean test(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOAuth2FlowAwareProfileConfiguration) {
-                return ((AbstractOAuth2FlowAwareProfileConfiguration) pc).isImplicitFlowEnabled(input);
+            if (pc instanceof OAuth2FlowAwareProfileConfiguration) {
+                return ((OAuth2FlowAwareProfileConfiguration) pc).isImplicitFlowEnabled(input);
             }
         }
         return false;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/IncludeIssuerInAuthenticationResponsePredicate.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/IncludeIssuerInAuthenticationResponsePredicate.java
index eb43f5c..922ace4 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/IncludeIssuerInAuthenticationResponsePredicate.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/IncludeIssuerInAuthenticationResponsePredicate.java
@@ -24,23 +24,24 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
-import net.shibboleth.oidc.profile.config.impl.OIDCAuthorizationConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCAuthenticationProviderProfileConfiguration;
 
 /**
  * A predicate implementation that forwards to
- * {@link OIDCAuthorizationConfiguration#isIncludeIssuerInResponse(ProfileRequestContext)}.
+ * {@link OIDCAuthenticationProviderProfileConfiguration#isIncludeIssuerInResponse(ProfileRequestContext)}.
  * 
  * @since 2.1.0
  */
 public class IncludeIssuerInAuthenticationResponsePredicate extends AbstractRelyingPartyPredicate {
     
     /** {@inheritDoc} */
+    @Override
     public boolean test(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OIDCAuthorizationConfiguration) {
-                return ((OIDCAuthorizationConfiguration) pc).isIncludeIssuerInResponse(input);
+            if (pc instanceof OIDCAuthenticationProviderProfileConfiguration) {
+                return ((OIDCAuthenticationProviderProfileConfiguration) pc).isIncludeIssuerInResponse(input);
             }
         }
         return false;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/RefreshTokensEnabledPredicate.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/RefreshTokensEnabledPredicate.java
index 272199e..6f24a1d 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/RefreshTokensEnabledPredicate.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/RefreshTokensEnabledPredicate.java
@@ -24,21 +24,22 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
-import net.shibboleth.oidc.profile.oauth2.config.impl.AbstractOAuth2FlowAwareProfileConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2FlowAwareProfileConfiguration;
 
 /**
  * A predicate implementation that forwards to
- * {@link AbstractOAuth2FlowAwareProfileConfiguration#isRefreshTokensEnabled(ProfileRequestContext)}.
+ * {@link OAuth2FlowAwareProfileConfiguration#isRefreshTokensEnabled(ProfileRequestContext)}.
  */
 public class RefreshTokensEnabledPredicate extends AbstractRelyingPartyPredicate {
     
     /** {@inheritDoc} */
+    @Override
     public boolean test(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOAuth2FlowAwareProfileConfiguration) {
-                return ((AbstractOAuth2FlowAwareProfileConfiguration) pc).isRefreshTokensEnabled(input);
+            if (pc instanceof OAuth2FlowAwareProfileConfiguration) {
+                return ((OAuth2FlowAwareProfileConfiguration) pc).isRefreshTokensEnabled(input);
             }
         }
         return false;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/SignRequestObjectPredicate.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/SignRequestObjectPredicate.java
index 1aacb81..f81f3b6 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/SignRequestObjectPredicate.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/logic/SignRequestObjectPredicate.java
@@ -24,7 +24,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
-import net.shibboleth.oidc.profile.config.impl.OIDCAuthorizationConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCAuthenticationRelyingPartyProfileConfiguration;
 
 /** A predicate that determines if the RequestObject JWT should be signed based on the profile configuration.*/
 public class SignRequestObjectPredicate extends AbstractRelyingPartyPredicate {
@@ -35,8 +35,8 @@ public class SignRequestObjectPredicate extends AbstractRelyingPartyPredicate {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OIDCAuthorizationConfiguration) {
-                return ((OIDCAuthorizationConfiguration) pc).isSignRequestObject(input);
+            if (pc instanceof OIDCAuthenticationRelyingPartyProfileConfiguration) {
+                return ((OIDCAuthenticationRelyingPartyProfileConfiguration) pc).isSignRequestObject(input);
             }
         }
         return false;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AccessTokenClaimsSetManipulationStrategyLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AccessTokenClaimsSetManipulationStrategyLookupFunction.java
index 0bca0fd..75d3315 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AccessTokenClaimsSetManipulationStrategyLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AccessTokenClaimsSetManipulationStrategyLookupFunction.java
@@ -27,11 +27,12 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.AbstractOIDCSSOConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2AccessTokenProducingProfileConfiguration;
 
 /**
  * A function that returns
- * {@link AbstractOIDCSSOConfiguration#getAccessTokenClaimsSetManipulationStrategy(ProfileRequestContext)}
+ * {@link OAuth2AccessTokenProducingProfileConfiguration#getAccessTokenClaimsSetManipulationStrategy
+ * (ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -43,13 +44,15 @@ public class AccessTokenClaimsSetManipulationStrategyLookupFunction  extends
     AbstractRelyingPartyLookupFunction<BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>>> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>> apply(
             @Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOIDCSSOConfiguration) {
-                return ((AbstractOIDCSSOConfiguration) pc).getAccessTokenClaimsSetManipulationStrategy(input);
+            if (pc instanceof OAuth2AccessTokenProducingProfileConfiguration) {
+                return ((OAuth2AccessTokenProducingProfileConfiguration) pc)
+                        .getAccessTokenClaimsSetManipulationStrategy(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AccessTokenLifetimeLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AccessTokenLifetimeLookupFunction.java
index e3c3374..e76cfb6 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AccessTokenLifetimeLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AccessTokenLifetimeLookupFunction.java
@@ -26,8 +26,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.AbstractOIDCSSOConfiguration;
-import net.shibboleth.oidc.profile.oauth2.config.impl.OAuth2TokenAudienceConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2AccessTokenProducingProfileConfiguration;
 
 /**
  * A function that returns
@@ -40,14 +39,13 @@ import net.shibboleth.oidc.profile.oauth2.config.impl.OAuth2TokenAudienceConfigu
 public class AccessTokenLifetimeLookupFunction extends AbstractRelyingPartyLookupFunction<Duration> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public Duration apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOIDCSSOConfiguration) {
-                return ((AbstractOIDCSSOConfiguration) pc).getAccessTokenLifetime(input);
-            } else if (pc instanceof OAuth2TokenAudienceConfiguration) {
-                return ((OAuth2TokenAudienceConfiguration) pc).getAccessTokenLifetime(input);
+            if (pc instanceof OAuth2AccessTokenProducingProfileConfiguration) {
+                return ((OAuth2AccessTokenProducingProfileConfiguration) pc).getAccessTokenLifetime(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AccessTokenTypeLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AccessTokenTypeLookupFunction.java
index b518dd4..89d39e4 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AccessTokenTypeLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AccessTokenTypeLookupFunction.java
@@ -24,8 +24,8 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.AbstractOIDCSSOConfiguration;
-import net.shibboleth.oidc.profile.oauth2.config.impl.OAuth2TokenAudienceConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2AccessTokenProducingProfileConfiguration;
+
 
 /**
  * A function that returns
@@ -43,10 +43,8 @@ public class AccessTokenTypeLookupFunction extends AbstractRelyingPartyLookupFun
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OAuth2TokenAudienceConfiguration) {
-                return ((OAuth2TokenAudienceConfiguration) pc).getAccessTokenType(input);
-            } else if (pc instanceof AbstractOIDCSSOConfiguration) {
-                return ((AbstractOIDCSSOConfiguration) pc).getAccessTokenType(input);
+            if (pc instanceof OAuth2AccessTokenProducingProfileConfiguration) {
+                return ((OAuth2AccessTokenProducingProfileConfiguration) pc).getAccessTokenType(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AcrClaimAlwaysEssentialLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AcrClaimAlwaysEssentialLookupFunction.java
index 17e6f44..08df9ac 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AcrClaimAlwaysEssentialLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AcrClaimAlwaysEssentialLookupFunction.java
@@ -24,10 +24,11 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
-import net.shibboleth.oidc.profile.config.impl.OIDCAuthorizationConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCAuthenticationProviderProfileConfiguration;
 
 /**
- * A predicate that returns {@link OIDCAuthorizationConfiguration#isAcrRequestAlwaysEssential(ProfileRequestContext)}
+ * A predicate that returns 
+ * {@link OIDCAuthenticationProviderProfileConfiguration#isAcrRequestAlwaysEssential(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function, by default a child
  * of the {@link ProfileRequestContext}.
  * 
@@ -38,13 +39,13 @@ import net.shibboleth.oidc.profile.config.impl.OIDCAuthorizationConfiguration;
 public class AcrClaimAlwaysEssentialLookupFunction extends AbstractRelyingPartyPredicate {
 
     /** {@inheritDoc} */
-    @Nullable
+    @Override
     public boolean test(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OIDCAuthorizationConfiguration) {
-                return ((OIDCAuthorizationConfiguration) pc).isAcrRequestAlwaysEssential(input);
+            if (pc instanceof OIDCAuthenticationProviderProfileConfiguration) {
+                return ((OIDCAuthenticationProviderProfileConfiguration) pc).isAcrRequestAlwaysEssential(input);
             }
         }
         return false;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AlwaysIncludedAttributesLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AlwaysIncludedAttributesLookupFunction.java
index df2307d..b5c0d25 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AlwaysIncludedAttributesLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AlwaysIncludedAttributesLookupFunction.java
@@ -26,7 +26,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.AbstractOIDCSSOConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCIDTokenProducingProfileConfiguration;
 
 /**
  * A function that obtains
@@ -40,12 +40,13 @@ public class AlwaysIncludedAttributesLookupFunction
     extends AbstractRelyingPartyLookupFunction<Set<String>> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public Set<String> apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOIDCSSOConfiguration) {
-                return ((AbstractOIDCSSOConfiguration)pc).getAlwaysIncludedAttributes(input);
+            if (pc instanceof OIDCIDTokenProducingProfileConfiguration) {
+                return ((OIDCIDTokenProducingProfileConfiguration)pc).getAlwaysIncludedAttributes(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AudienceRestrictionsLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AudienceRestrictionsLookupFunction.java
index 77e3a7c..cbdbbaf 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AudienceRestrictionsLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AudienceRestrictionsLookupFunction.java
@@ -24,13 +24,13 @@ import javax.annotation.Nullable;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableCollection.Builder;
+import com.google.common.collect.ImmutableList;
 
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.AbstractOIDCSSOConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCIDTokenProducingProfileConfiguration;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
@@ -38,7 +38,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 /**
  * A function that returns the effective audience restrictions to include in ID tokens, based on combining a relying
  * party's entityID with the result of
- * {@link AbstractOIDCSSOConfiguration#getAdditionalAudiencesForIdToken(ProfileRequestContext)}, if such
+ * {@link OIDCIDTokenProducingProfileConfiguration#getAdditionalAudiencesForIdToken(ProfileRequestContext)}, if such
  * a profile is available from a {@link RelyingPartyContext} obtained via a lookup function, by default a child of the
  * {@link ProfileRequestContext}.
  * 
@@ -49,19 +49,21 @@ import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 public class AudienceRestrictionsLookupFunction extends AbstractRelyingPartyLookupFunction<Collection<String>> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable @NonnullElements @NotLive @Unmodifiable public Collection<String> apply(
             @Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final String id = rpc.getRelyingPartyId();
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOIDCSSOConfiguration
-                    && !((AbstractOIDCSSOConfiguration) pc).getAdditionalAudiencesForIdToken(input).isEmpty()) {
+            if (pc instanceof OIDCIDTokenProducingProfileConfiguration
+                    && !((OIDCIDTokenProducingProfileConfiguration) pc).getAdditionalAudiencesForIdToken(input)
+                            .isEmpty()) {
                 final Builder<String> builder = ImmutableList.builder();
                 if (id != null) {
                     builder.add(rpc.getRelyingPartyId());
                 }
-                builder.addAll(((AbstractOIDCSSOConfiguration) pc).getAdditionalAudiencesForIdToken(input));
+                builder.addAll(((OIDCIDTokenProducingProfileConfiguration) pc).getAdditionalAudiencesForIdToken(input));
                 return builder.build();
             } else if (id != null) {
                 return Collections.singletonList(rpc.getRelyingPartyId());
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AuthorizationCodeClaimsSetManipulationStrategyLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AuthorizationCodeClaimsSetManipulationStrategyLookupFunction.java
index fcd0423..98d5165 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AuthorizationCodeClaimsSetManipulationStrategyLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AuthorizationCodeClaimsSetManipulationStrategyLookupFunction.java
@@ -27,11 +27,12 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.OIDCAuthorizationConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2AuthorizationCodeProducingProfileConfiguration;
 
 /**
  * A function that returns
- * {@link OIDCAuthorizationConfiguration#getAuthorizationCodeClaimsSetManipulationStrategy(ProfileRequestContext)}
+ * {@link OAuth2AuthorizationCodeProducingProfileConfiguration#getAuthorizationCodeClaimsSetManipulationStrategy
+ * (ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -43,13 +44,15 @@ public class AuthorizationCodeClaimsSetManipulationStrategyLookupFunction  exten
     AbstractRelyingPartyLookupFunction<BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>>> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>> apply(
             @Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OIDCAuthorizationConfiguration) {
-                return ((OIDCAuthorizationConfiguration) pc).getAuthorizationCodeClaimsSetManipulationStrategy(input);
+            if (pc instanceof OAuth2AuthorizationCodeProducingProfileConfiguration) {
+                return ((OAuth2AuthorizationCodeProducingProfileConfiguration) pc)
+                        .getAuthorizationCodeClaimsSetManipulationStrategy(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AuthzCodeLifetimeLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AuthzCodeLifetimeLookupFunction.java
index 6cd7a85..6c9a411 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AuthzCodeLifetimeLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/AuthzCodeLifetimeLookupFunction.java
@@ -26,11 +26,11 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.OIDCAuthorizationConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2AuthorizationCodeProducingProfileConfiguration;
 
 /**
  * A function that returns
- * {@link OIDCAuthorizationConfiguration#getAuthorizeCodeLifetime(ProfileRequestContext)}
+ * {@link OAuth2AuthorizationCodeProducingProfileConfiguration#getAuthorizeCodeLifetime(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -39,12 +39,13 @@ import net.shibboleth.oidc.profile.config.impl.OIDCAuthorizationConfiguration;
 public class AuthzCodeLifetimeLookupFunction extends AbstractRelyingPartyLookupFunction<Duration> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public Duration apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OIDCAuthorizationConfiguration) {
-                return ((OIDCAuthorizationConfiguration) pc).getAuthorizeCodeLifetime(input);
+            if (pc instanceof OAuth2AuthorizationCodeProducingProfileConfiguration) {
+                return ((OAuth2AuthorizationCodeProducingProfileConfiguration) pc).getAuthorizeCodeLifetime(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/ClaimsValidatorLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/ClaimsValidatorLookupFunction.java
index 1d6bded..358b3bd 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/ClaimsValidatorLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/ClaimsValidatorLookupFunction.java
@@ -25,11 +25,11 @@ import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
 import net.shibboleth.oidc.jwt.claims.ClaimsValidator;
-import net.shibboleth.oidc.profile.oauth2.config.impl.AbstractOAuth2ClientAuthenticableProfileConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2ClientAuthenticableProfileConfiguration;
 
 /**
  * A function that obtains
- * {@link AbstractOAuth2ClientAuthenticableProfileConfiguration#getClaimsValidator(ProfileRequestContext)}
+ * {@link OAuth2ClientAuthenticableProfileConfiguration#getClaimsValidator(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -40,12 +40,13 @@ import net.shibboleth.oidc.profile.oauth2.config.impl.AbstractOAuth2ClientAuthen
 public class ClaimsValidatorLookupFunction extends AbstractRelyingPartyLookupFunction<ClaimsValidator> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public ClaimsValidator apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOAuth2ClientAuthenticableProfileConfiguration) {
-                return ((AbstractOAuth2ClientAuthenticableProfileConfiguration) pc).getClaimsValidator(input);
+            if (pc instanceof OAuth2ClientAuthenticableProfileConfiguration) {
+                return ((OAuth2ClientAuthenticableProfileConfiguration) pc).getClaimsValidator(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/ClientInformationStringValueLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/ClientInformationStringValueLookupFunction.java
index 334f0e6..a530389 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/ClientInformationStringValueLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/ClientInformationStringValueLookupFunction.java
@@ -31,8 +31,8 @@ import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
- * Fetches the value for the configured key as {@link String}. May be {@code null} if the value is not found or the given
- * {@link OIDCClientInformation} or its metadata is null.
+ * Fetches the value for the configured key as {@link String}. May be {@code null} if the value is not found or the 
+ * given {@link OIDCClientInformation} or its metadata is null.
  */
 public class ClientInformationStringValueLookupFunction implements Function<OIDCClientInformation, String> {
 
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/DeniedUserInfoAttributesLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/DeniedUserInfoAttributesLookupFunction.java
index e1e8f37..ae4f33e 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/DeniedUserInfoAttributesLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/DeniedUserInfoAttributesLookupFunction.java
@@ -26,13 +26,13 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.OIDCAuthorizationConfiguration;
-import net.shibboleth.oidc.profile.config.impl.OIDCUserInfoConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCAuthenticationProviderProfileConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCUserInfoProfileConfiguration;
 
 /**
  * A function that obtains
- * {@link OIDCAuthorizationConfiguration#getDeniedUserInfoAttributes(ProfileRequestContext)} or
- * {@link OIDCUserInfoConfiguration#getDeniedUserInfoAttributes(ProfileRequestContext)}
+ * {@link OIDCAuthenticationProviderProfileConfiguration#getDeniedUserInfoAttributes(ProfileRequestContext)} or
+ * {@link OIDCUserInfoProfileConfiguration#getDeniedUserInfoAttributes(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -42,14 +42,15 @@ public class DeniedUserInfoAttributesLookupFunction
     extends AbstractRelyingPartyLookupFunction<Set<String>> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public Set<String> apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OIDCAuthorizationConfiguration) {
-                return ((OIDCAuthorizationConfiguration)pc).getDeniedUserInfoAttributes(input);
-            } else if (pc instanceof OIDCUserInfoConfiguration) {
-                return ((OIDCUserInfoConfiguration) pc).getDeniedUserInfoAttributes(input);
+            if (pc instanceof OIDCAuthenticationProviderProfileConfiguration) {
+                return ((OIDCAuthenticationProviderProfileConfiguration)pc).getDeniedUserInfoAttributes(input);
+            } else if (pc instanceof OIDCUserInfoProfileConfiguration) {
+                return ((OIDCUserInfoProfileConfiguration) pc).getDeniedUserInfoAttributes(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/EncodedAttributesLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/EncodedAttributesLookupFunction.java
index 19762eb..3c42703 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/EncodedAttributesLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/EncodedAttributesLookupFunction.java
@@ -26,11 +26,11 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.OIDCAuthorizationConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2TokenHandlingProfileConfiguration;
 
 /**
  * A function that obtains
- * {@link OIDCAuthorizationConfiguration#getEncodedAttributes(ProfileRequestContext)}
+ * {@link OAuth2TokenHandlingProfileConfiguration#getEncodedAttributes(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -40,12 +40,13 @@ public class EncodedAttributesLookupFunction
     extends AbstractRelyingPartyLookupFunction<Set<String>> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public Set<String> apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OIDCAuthorizationConfiguration) {
-                return ((OIDCAuthorizationConfiguration)pc).getEncodedAttributes(input);
+            if (pc instanceof OAuth2TokenHandlingProfileConfiguration) {
+                return ((OAuth2TokenHandlingProfileConfiguration)pc).getEncodedAttributes(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/IDTokenLifetimeLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/IDTokenLifetimeLookupFunction.java
index 7f7d76b..195c7ce 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/IDTokenLifetimeLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/IDTokenLifetimeLookupFunction.java
@@ -26,11 +26,11 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.AbstractOIDCSSOConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCIDTokenProducingProfileConfiguration;
 
 /**
  * A function that returns
- * {@link AbstractOIDCSSOConfiguration#getIDTokenLifetime(ProfileRequestContext)}
+ * {@link OIDCIDTokenProducingProfileConfiguration#getIDTokenLifetime(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -39,12 +39,13 @@ import net.shibboleth.oidc.profile.config.impl.AbstractOIDCSSOConfiguration;
 public class IDTokenLifetimeLookupFunction extends AbstractRelyingPartyLookupFunction<Duration> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public Duration apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOIDCSSOConfiguration) {
-                return ((AbstractOIDCSSOConfiguration) pc).getIDTokenLifetime(input);
+            if (pc instanceof OIDCIDTokenProducingProfileConfiguration) {
+                return ((OIDCIDTokenProducingProfileConfiguration) pc).getIDTokenLifetime(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/IDTokenManipulationStrategyLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/IDTokenManipulationStrategyLookupFunction.java
index 82a5913..6b4225a 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/IDTokenManipulationStrategyLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/IDTokenManipulationStrategyLookupFunction.java
@@ -27,11 +27,11 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.AbstractOIDCSSOConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCIDTokenProducingProfileConfiguration;
 
 /**
  * A function that returns
- * {@link AbstractOIDCSSOConfiguration#getIDTokenManipulationStrategy(ProfileRequestContext)}
+ * {@link OIDCIDTokenProducingProfileConfiguration#getIDTokenManipulationStrategy(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -41,13 +41,14 @@ public class IDTokenManipulationStrategyLookupFunction  extends
     AbstractRelyingPartyLookupFunction<BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>>> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>> apply(
             @Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOIDCSSOConfiguration) {
-                return ((AbstractOIDCSSOConfiguration) pc).getIDTokenManipulationStrategy(input);
+            if (pc instanceof OIDCIDTokenProducingProfileConfiguration) {
+                return ((OIDCIDTokenProducingProfileConfiguration) pc).getIDTokenManipulationStrategy(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/IssuedClaimsValidatorLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/IssuedClaimsValidatorLookupFunction.java
index c667fb7..bce349c 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/IssuedClaimsValidatorLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/IssuedClaimsValidatorLookupFunction.java
@@ -25,11 +25,11 @@ import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
 import net.shibboleth.oidc.jwt.claims.ClaimsValidator;
-import net.shibboleth.oidc.profile.oauth2.config.impl.AbstractOAuth2TokenValidatingConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2TokenValidatingProfileConfiguration;
 
 /**
  * A function that obtains
- * {@link AbstractOAuth2TokenValidatingConfiguration#getIssuedClaimsValidator(ProfileRequestContext)}
+ * {@link OAuth2TokenValidatingProfileConfiguration#getIssuedClaimsValidator(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -40,12 +40,13 @@ import net.shibboleth.oidc.profile.oauth2.config.impl.AbstractOAuth2TokenValidat
 public class IssuedClaimsValidatorLookupFunction extends AbstractRelyingPartyLookupFunction<ClaimsValidator> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public ClaimsValidator apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOAuth2TokenValidatingConfiguration) {
-                return ((AbstractOAuth2TokenValidatingConfiguration) pc).getIssuedClaimsValidator(input);
+            if (pc instanceof OAuth2TokenValidatingProfileConfiguration) {
+                return ((OAuth2TokenValidatingProfileConfiguration) pc).getIssuedClaimsValidator(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RefreshTokenClaimsSetManipulationStrategyLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RefreshTokenClaimsSetManipulationStrategyLookupFunction.java
index adbfdb1..95fd4cf 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RefreshTokenClaimsSetManipulationStrategyLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RefreshTokenClaimsSetManipulationStrategyLookupFunction.java
@@ -27,11 +27,11 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.oauth2.config.impl.OAuth2TokenConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2TokenProfileConfiguration;
 
 /**
  * A function that returns
- * {@link OAuth2TokenConfiguration#getRefreshTokenClaimsSetManipulationStrategy(ProfileRequestContext)}
+ * {@link OAuth2TokenProfileConfiguration#getRefreshTokenClaimsSetManipulationStrategy(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -43,13 +43,14 @@ public class RefreshTokenClaimsSetManipulationStrategyLookupFunction  extends
     AbstractRelyingPartyLookupFunction<BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>>> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>> apply(
             @Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OAuth2TokenConfiguration) {
-                return ((OAuth2TokenConfiguration) pc).getRefreshTokenClaimsSetManipulationStrategy(input);
+            if (pc instanceof OAuth2TokenProfileConfiguration) {
+                return ((OAuth2TokenProfileConfiguration) pc).getRefreshTokenClaimsSetManipulationStrategy(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RefreshTokenLifetimeLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RefreshTokenLifetimeLookupFunction.java
index 555addf..64ab92c 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RefreshTokenLifetimeLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RefreshTokenLifetimeLookupFunction.java
@@ -26,11 +26,11 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.AbstractOIDCSSOConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2RefreshTokenProducingProfileConfiguration;
 
 /**
  * A function that returns
- * {@link AbstractOIDCSSOConfiguration#getRefreshTokenLifetime(ProfileRequestContext)}
+ * {@link OAuth2RefreshTokenProducingProfileConfiguration#getRefreshTokenLifetime(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -39,12 +39,13 @@ import net.shibboleth.oidc.profile.config.impl.AbstractOIDCSSOConfiguration;
 public class RefreshTokenLifetimeLookupFunction extends AbstractRelyingPartyLookupFunction<Duration> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public Duration apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOIDCSSOConfiguration) {
-                return ((AbstractOIDCSSOConfiguration) pc).getRefreshTokenLifetime(input);
+            if (pc instanceof OAuth2RefreshTokenProducingProfileConfiguration) {
+                return ((OAuth2RefreshTokenProducingProfileConfiguration) pc).getRefreshTokenLifetime(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RegistrationMetadataPolicyLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RegistrationMetadataPolicyLookupFunction.java
index 83c6e38..d2461bb 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RegistrationMetadataPolicyLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RegistrationMetadataPolicyLookupFunction.java
@@ -27,11 +27,11 @@ import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
 import net.shibboleth.oidc.metadata.policy.MetadataPolicy;
-import net.shibboleth.oidc.profile.config.impl.OIDCDynamicRegistrationConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCDynamicRegistrationProfileConfiguration;
 
 /**
  * A function that returns
- * {@link OIDCDynamicRegistrationConfiguration#getMetadataPolicy(ProfileRequestContext)}
+ * {@link OIDCDynamicRegistrationProfileConfiguration#getMetadataPolicy(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -41,12 +41,13 @@ public class RegistrationMetadataPolicyLookupFunction
     extends AbstractRelyingPartyLookupFunction<Map<String,MetadataPolicy>> {
     
     /** {@inheritDoc} */
+    @Override
     @Nullable public Map<String,MetadataPolicy> apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc != null && pc instanceof OIDCDynamicRegistrationConfiguration) {
-                return ((OIDCDynamicRegistrationConfiguration) pc).getMetadataPolicy(input);
+            if (pc instanceof OIDCDynamicRegistrationProfileConfiguration) {
+                return ((OIDCDynamicRegistrationProfileConfiguration) pc).getMetadataPolicy(input);
             }
         }
         return null;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RegistrationValidityPeriodLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RegistrationValidityPeriodLookupFunction.java
index 00385f6..5be9fe6 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RegistrationValidityPeriodLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RegistrationValidityPeriodLookupFunction.java
@@ -26,11 +26,11 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.OIDCDynamicRegistrationConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCDynamicRegistrationProfileConfiguration;
 
 /**
  * A function that returns
- * {@link OIDCDynamicRegistrationConfiguration#getRegistrationValidityPeriod(ProfileRequestContext)}
+ * {@link OIDCDynamicRegistrationProfileConfiguration#getRegistrationValidityPeriod(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -39,12 +39,13 @@ import net.shibboleth.oidc.profile.config.impl.OIDCDynamicRegistrationConfigurat
 public class RegistrationValidityPeriodLookupFunction extends AbstractRelyingPartyLookupFunction<Duration> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public Duration apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OIDCDynamicRegistrationConfiguration) {
-                return ((OIDCDynamicRegistrationConfiguration) pc).getRegistrationValidityPeriod(input);
+            if (pc instanceof OIDCDynamicRegistrationProfileConfiguration) {
+                return ((OIDCDynamicRegistrationProfileConfiguration) pc).getRegistrationValidityPeriod(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RevocationLifetimeLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RevocationLifetimeLookupFunction.java
index 863c2ec..63d00c3 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RevocationLifetimeLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RevocationLifetimeLookupFunction.java
@@ -26,11 +26,11 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.oauth2.config.impl.OAuth2TokenRevocationConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2TokenRevocationProfileConfiguration;
 
 /**
  * A function that returns
- * {@link OAuth2TokenRevocationConfiguration#getRevocationLifetime(ProfileRequestContext)}
+ * {@link OAuth2TokenRevocationProfileConfiguration#getRevocationLifetime(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -53,13 +53,15 @@ public class RevocationLifetimeLookupFunction extends AbstractRelyingPartyLookup
     }
     
     /** {@inheritDoc} */
+    @Override
     @Nullable public Duration apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = activeProfileOnly ? rpc.getProfileConfig() :
-                rpc.getConfiguration().getProfileConfiguration(input, OAuth2TokenRevocationConfiguration.PROFILE_ID);
-            if (pc instanceof OAuth2TokenRevocationConfiguration) {
-                return ((OAuth2TokenRevocationConfiguration) pc).getRevocationLifetime(input);
+                rpc.getConfiguration()
+                    .getProfileConfiguration(input, OAuth2TokenRevocationProfileConfiguration.PROFILE_ID);
+            if (pc instanceof OAuth2TokenRevocationProfileConfiguration) {
+                return ((OAuth2TokenRevocationProfileConfiguration) pc).getRevocationLifetime(input);
             }
         }
         return null;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RevocationMethodLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RevocationMethodLookupFunction.java
index 98cd8f7..bf32e6c 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RevocationMethodLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/RevocationMethodLookupFunction.java
@@ -24,12 +24,12 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.oauth2.config.impl.OAuth2TokenRevocationConfiguration;
-import net.shibboleth.oidc.profile.oauth2.config.impl.OAuth2TokenRevocationConfiguration.OAuth2TokenRevocationMethod;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2TokenRevocationProfileConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2TokenRevocationProfileConfiguration.OAuth2TokenRevocationMethod;
 
 /**
  * A function that returns
- * {@link OAuth2TokenRevocationConfiguration#getRevocationMethod(ProfileRequestContext)}
+ * {@link OAuth2TokenRevocationProfileConfiguration#getRevocationMethod(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -40,12 +40,13 @@ import net.shibboleth.oidc.profile.oauth2.config.impl.OAuth2TokenRevocationConfi
 public class RevocationMethodLookupFunction extends AbstractRelyingPartyLookupFunction<OAuth2TokenRevocationMethod> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public OAuth2TokenRevocationMethod apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OAuth2TokenRevocationConfiguration) {
-                return ((OAuth2TokenRevocationConfiguration) pc).getRevocationMethod(input);
+            if (pc instanceof OAuth2TokenRevocationProfileConfiguration) {
+                return ((OAuth2TokenRevocationProfileConfiguration) pc).getRevocationMethod(input);
             }
         }
         return null;
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/SecretExpirationPeriodLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/SecretExpirationPeriodLookupFunction.java
index 6f858a0..b224d96 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/SecretExpirationPeriodLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/SecretExpirationPeriodLookupFunction.java
@@ -26,11 +26,11 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.config.impl.OIDCDynamicRegistrationConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCDynamicRegistrationProfileConfiguration;
 
 /**
  * A function that returns
- * {@link OIDCDynamicRegistrationConfiguration#getSecretExpirationPeriod(ProfileRequestContext)}
+ * {@link OIDCDynamicRegistrationProfileConfiguration#getSecretExpirationPeriod(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}.
  * 
@@ -39,12 +39,13 @@ import net.shibboleth.oidc.profile.config.impl.OIDCDynamicRegistrationConfigurat
 public class SecretExpirationPeriodLookupFunction extends AbstractRelyingPartyLookupFunction<Duration> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public Duration apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof OIDCDynamicRegistrationConfiguration) {
-                return ((OIDCDynamicRegistrationConfiguration) pc).getSecretExpirationPeriod(input);
+            if (pc instanceof OIDCDynamicRegistrationProfileConfiguration) {
+                return ((OIDCDynamicRegistrationProfileConfiguration) pc).getSecretExpirationPeriod(input);
             }
         }
         
diff --git a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/TokenEndpointAuthMethodLookupFunction.java b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/TokenEndpointAuthMethodLookupFunction.java
index 61f7087..0750b20 100644
--- a/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/TokenEndpointAuthMethodLookupFunction.java
+++ b/oidc-common-profile-api/src/main/java/net/shibboleth/oidc/profile/config/navigate/TokenEndpointAuthMethodLookupFunction.java
@@ -29,11 +29,11 @@ import com.nimbusds.oauth2.sdk.auth.ClientAuthenticationMethod;
 import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.AbstractRelyingPartyLookupFunction;
-import net.shibboleth.oidc.profile.oauth2.config.impl.AbstractOAuth2ClientAuthenticableProfileConfiguration;
+import net.shibboleth.oidc.profile.oauth2.config.OAuth2ClientAuthenticableProfileConfiguration;
 
 /**
  * A function that obtains
- * {@link AbstractOAuth2ClientAuthenticableProfileConfiguration#getTokenEndpointAuthMethods(ProfileRequestContext)}
+ * {@link OAuth2ClientAuthenticableProfileConfiguration#getTokenEndpointAuthMethods(ProfileRequestContext)}
  * if such a profile is available from a {@link RelyingPartyContext} obtained via a lookup function,
  * by default a child of the {@link ProfileRequestContext}. That result is then transformed into a list
  * of {@link ClientAuthenticationMethod}s.
@@ -44,13 +44,14 @@ public class TokenEndpointAuthMethodLookupFunction
         extends AbstractRelyingPartyLookupFunction<Set<ClientAuthenticationMethod>> {
 
     /** {@inheritDoc} */
+    @Override
     @Nullable public Set<ClientAuthenticationMethod> apply(@Nullable final ProfileRequestContext input) {
         final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
-            if (pc instanceof AbstractOAuth2ClientAuthenticableProfileConfiguration) {
+            if (pc instanceof OAuth2ClientAuthenticableProfileConfiguration) {
                 final Set<String> methods =
-                        ((AbstractOAuth2ClientAuthenticableProfileConfiguration)pc).getTokenEndpointAuthMethods(input);
+                        ((OAuth2ClientAuthenticableProfileConfiguration)pc).getTokenEndpointAuthMethods(input);
                 if (methods != null) {
                     return methods
                             .stream()
diff --git a/oidc-common-profile-impl/pom.xml b/oidc-common-profile-impl/pom.xml
index d591eeb..21a43a4 100644
--- a/oidc-common-profile-impl/pom.xml
+++ b/oidc-common-profile-impl/pom.xml
@@ -22,11 +22,6 @@
             <groupId>net.shibboleth.oidc</groupId>
             <artifactId>oidc-common-profile-api</artifactId>
         </dependency>
-        <!-- TODO remove impl module. Needed for the CredentialConversionUtil class - maybe move that to API?-->
-        <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
-            <artifactId>oidc-common-crypto-impl</artifactId>
-        </dependency>
         <dependency>
             <groupId>net.shibboleth.oidc</groupId>
             <artifactId>oidc-common-crypto-api</artifactId>
diff --git a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/config/impl/OIDCUserInfoConfiguration.java b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/config/impl/OIDCUserInfoConfiguration.java
index c9b71bf..33a04df 100644
--- a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/config/impl/OIDCUserInfoConfiguration.java
+++ b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/config/impl/OIDCUserInfoConfiguration.java
@@ -43,6 +43,7 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
 /**
  *  Implementation of a profile configuration for the OpenID Connect core protocol userinfo endpoint.
  */
+//TODO deniedUserInfoAttributesLookupStrategy is also common to OIDCUserInfoProfileConfiguration 
 public class OIDCUserInfoConfiguration extends AbstractOAuth2TokenValidatingConfiguration
         implements OIDCUserInfoProfileConfiguration, AttributeResolvingProfileConfiguration {
 
diff --git a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/config/impl/TestInterfaces.java b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/config/impl/TestInterfaces.java
index 6859483..dd4a7a7 100644
--- a/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/config/impl/TestInterfaces.java
+++ b/oidc-common-profile-impl/src/main/java/net/shibboleth/oidc/profile/config/impl/TestInterfaces.java
@@ -5,12 +5,11 @@ import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.idp.profile.config.OverriddenIssuerProfileConfiguration;
 import net.shibboleth.oidc.profile.config.OIDCAuthenticationRelyingPartyProfileConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCUserInfoProfileConfiguration;
 import net.shibboleth.oidc.profile.oauth2.config.OAuth2RefreshTokenProducingProfileConfiguration;
 import net.shibboleth.oidc.profile.oauth2.config.OAuth2TokenProfileConfiguration;
-import net.shibboleth.oidc.profile.oauth2.config.OAuth2TokenValidatingProfileConfiguration;
 import net.shibboleth.oidc.profile.oauth2.config.impl.OAuth2TokenConfiguration;
 import net.shibboleth.oidc.profile.oauth2.config.impl.OAuth2TokenIntrospectionConfiguration;
-import net.shibboleth.oidc.profile.oauth2.config.impl.OAuth2TokenRevocationConfiguration;
 
 public class TestInterfaces {
     
@@ -34,10 +33,10 @@ public class TestInterfaces {
             System.out.println("Interface is: "+configClassThree);
             System.out.println("Has method: "+((OIDCAuthenticationRelyingPartyProfileConfiguration)configClassThree).getResponseMode(new ProfileRequestContext()));
         }
-        final var configClassFour = new OAuth2TokenRevocationConfiguration();
-        if (configClassFour instanceof OAuth2TokenValidatingProfileConfiguration) {
+        final var configClassFour = new OIDCUserInfoConfiguration();
+        if (configClassFour instanceof OIDCUserInfoProfileConfiguration) {
             System.out.println("Interface is: "+configClassFour);
-            System.out.println("Has method: "+((OAuth2TokenValidatingProfileConfiguration)configClassFour).getIssuedClaimsValidator(new ProfileRequestContext()));
+            System.out.println("Has method: "+((OIDCUserInfoProfileConfiguration)configClassFour).isEncryptionOptional(new ProfileRequestContext()));
         }
     }
 
diff --git a/oidc-common-profile-api/src/test/java/net/shibboleth/oidc/profile/config/OIDCCoreProtocolConfigurationTest.java b/oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/config/impl/OIDCCoreProtocolConfigurationTest.java
similarity index 96%
rename from oidc-common-profile-api/src/test/java/net/shibboleth/oidc/profile/config/OIDCCoreProtocolConfigurationTest.java
rename to oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/config/impl/OIDCCoreProtocolConfigurationTest.java
index d9d1822..698e44c 100644
--- a/oidc-common-profile-api/src/test/java/net/shibboleth/oidc/profile/config/OIDCCoreProtocolConfigurationTest.java
+++ b/oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/config/impl/OIDCCoreProtocolConfigurationTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.oidc.profile.config;
+package net.shibboleth.oidc.profile.config.impl;
 
 import java.time.Duration;
 import java.util.Collections;
@@ -26,7 +26,7 @@ import org.testng.annotations.Test;
 
 import net.shibboleth.idp.profile.config.SecurityConfiguration;
 import net.shibboleth.oidc.authn.principal.AuthenticationContextClassReferencePrincipal;
-import net.shibboleth.oidc.profile.config.impl.OIDCAuthorizationConfiguration;
+import net.shibboleth.oidc.profile.config.OIDCSSOProfileConfiguration;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 
 /**
@@ -45,7 +45,7 @@ public class OIDCCoreProtocolConfigurationTest {
 
     @Test
     public void testInitialState() throws ComponentInitializationException {
-        Assert.assertEquals(config.getId(), OIDCAuthorizationConfiguration.PROFILE_ID);
+        Assert.assertEquals(config.getId(), OIDCSSOProfileConfiguration.PROFILE_ID);
         Assert.assertTrue(config.getAuthenticationFlows(null).isEmpty());
         Assert.assertTrue(config.getPostAuthenticationFlows(null).isEmpty());
         Assert.assertTrue(config.getDefaultAuthenticationMethods(null).isEmpty());
diff --git a/oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/impl/FormOutboundKeySetResponseMessageTest.java b/oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/impl/FormOutboundKeySetResponseMessageTest.java
index 0b1ecb2..274446c 100644
--- a/oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/impl/FormOutboundKeySetResponseMessageTest.java
+++ b/oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/impl/FormOutboundKeySetResponseMessageTest.java
@@ -21,6 +21,8 @@ import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.annotation.Nonnull;
+
 import org.mockito.Mockito;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.action.EventIds;
@@ -47,11 +49,15 @@ import net.shibboleth.oidc.profile.config.JSONSecurityConfiguration;
 import net.shibboleth.oidc.profile.config.impl.OIDCPublishKeySetConfiguration;
 import net.shibboleth.oidc.profile.config.navigate.JWKCredentialsToPublishLookupStrategy;
 import net.shibboleth.oidc.profile.messaging.JSONSuccessResponse;
-import net.shibboleth.oidc.security.credential.impl.BasicJWKCredentialFactoryBean;
-import net.shibboleth.oidc.security.credential.impl.ReturnAllCollectionJOSEObjectCredentialResolver;
+import net.shibboleth.oidc.security.credential.BasicJWKCredentialFactoryBean;
+import net.shibboleth.oidc.security.credential.JOSEObjectCredentialResolver;
 import net.shibboleth.oidc.security.jose.DecryptionConfiguration;
 import net.shibboleth.oidc.security.jose.SignatureSigningConfiguration;
+import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
+import net.shibboleth.utilities.java.support.resolver.ResolverException;
 
 /** {@link FormOutboundKeySetResponseMessage} unit test. */
 public class FormOutboundKeySetResponseMessageTest {
@@ -94,7 +100,8 @@ public class FormOutboundKeySetResponseMessageTest {
         final SignatureSigningConfiguration signConfig = Mockito.mock(SignatureSigningConfiguration.class);
         Mockito.when(signConfig.getSigningCredentials()).thenReturn(signCreds);
         final DecryptionConfiguration decConfig = Mockito.mock(DecryptionConfiguration.class);
-        final ReturnAllCollectionJOSEObjectCredentialResolver resolver = new ReturnAllCollectionJOSEObjectCredentialResolver(encCreds);
+        final MockReturnAllCollectionJOSEObjectCredentialResolver resolver = 
+                new MockReturnAllCollectionJOSEObjectCredentialResolver(encCreds);
         Mockito.when(decConfig.getKEKCredentialResolver()).thenReturn(resolver);
         final JSONSecurityConfiguration secConf = new JSONSecurityConfiguration();
         secConf.setJwtSignatureSigningConfiguration(signConfig);
@@ -178,5 +185,39 @@ public class FormOutboundKeySetResponseMessageTest {
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertEvent(event, IdPEventIds.INVALID_RELYING_PARTY_CTX);
     }
+    
+    /** Mock resolver which just returns all the credentials it knows.*/
+    private static class MockReturnAllCollectionJOSEObjectCredentialResolver implements JOSEObjectCredentialResolver {
+        
+        /** List of credentials held by this resolver. */
+        private final List<Credential> collection;
+        
+        /**
+         * Constructor.
+         *
+         * @param credentials collection of credentials to be held by this resolver
+         */
+        public MockReturnAllCollectionJOSEObjectCredentialResolver(
+                @Nonnull @ParameterName(name="credentials") final List<Credential> credentials) {
+            Constraint.isNotNull(credentials, "Input credentials list cannot be null");
+            
+            collection = new ArrayList<>(credentials);
+        }
+
+        @Override
+        public Iterable<Credential> resolve(final CriteriaSet criteria) throws ResolverException {
+            return collection;
+        }
+
+        @Override
+        public Credential resolveSingle(final CriteriaSet criteria) throws ResolverException {
+            final Iterable<Credential> creds = resolve(criteria);
+            if (creds.iterator().hasNext()) {
+                return creds.iterator().next();
+            }
+            return null;
+        }
+
+    }
 
 }
\ No newline at end of file
diff --git a/oidc-common-profile-api/src/test/java/net/shibboleth/oidc/profile/oauth2/config/OAuth2TokenRevocationConfigurationTest.java b/oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/oauth2/config/impl/OAuth2TokenRevocationConfigurationTest.java
similarity index 96%
rename from oidc-common-profile-api/src/test/java/net/shibboleth/oidc/profile/oauth2/config/OAuth2TokenRevocationConfigurationTest.java
rename to oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/oauth2/config/impl/OAuth2TokenRevocationConfigurationTest.java
index 00188e3..525edfd 100644
--- a/oidc-common-profile-api/src/test/java/net/shibboleth/oidc/profile/oauth2/config/OAuth2TokenRevocationConfigurationTest.java
+++ b/oidc-common-profile-impl/src/test/java/net/shibboleth/oidc/profile/oauth2/config/impl/OAuth2TokenRevocationConfigurationTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.oidc.profile.oauth2.config;
+package net.shibboleth.oidc.profile.oauth2.config.impl;
 
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list