[java-idp-oidc] branch main updated: JOIDC-194 - Logging improvements for message tracing
Henri Mikkonen
henri.mikkonen at iki.fi
Thu Apr 4 07:06:39 UTC 2024
This is an automated email from the git hooks/post-receive script.
hjmikkon pushed a commit to branch main
in repository java-idp-oidc.
View the commit online:
http://git.shibboleth.net/view/?p=java-idp-oidc.git;a=commit;h=71d2cfaaa83e6880c0d7e6f85b4a20b2d8c5fbc4
The following commit(s) were added to refs/heads/main by this push:
new 71d2cfaa JOIDC-194 - Logging improvements for message tracing
71d2cfaa is described below
commit 71d2cfaaa83e6880c0d7e6f85b4a20b2d8c5fbc4
Author: Henri Mikkonen <henri.mikkonen at iki.fi>
AuthorDate: Thu Apr 4 10:06:07 2024 +0300
JOIDC-194 - Logging improvements for message tracing
https://shibboleth.atlassian.net/browse/JOIDC-194
Included request object and logout token payload contents into protocol messages on TRACE.
The Jackson object mapper bean defined in idp.oidc.logging.objectMapper is used
for pretty printing the JSON contents, defaulting to shibboleth.oidc.JSONObjectMapper.
---
.../plugin/oidc/op/encoding/impl/ResponseUtil.java | 24 +++++++++
.../impl/PrepareBackChannelLogoutRequest.java | 42 +++++++++++++++
.../op/oauth2/profile/impl/BuildAccessToken.java | 4 +-
.../impl/SetRequestObjectToResponseContext.java | 63 ++++++++++++++++++++--
.../profile/impl/ManipulateClaimsForIDToken.java | 2 +-
.../oidc/oidc-logout-propagation-beans.xml | 3 +-
.../idp/flows/oidc/authorize/authorize-beans.xml | 3 +-
.../impl/PrepareBackChannelLogoutRequestTest.java | 2 +
.../SetRequestObjectToResponseContextTest.java | 2 +
9 files changed, 136 insertions(+), 9 deletions(-)
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/ResponseUtil.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/ResponseUtil.java
index 9b276762..0aaabd17 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/ResponseUtil.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/ResponseUtil.java
@@ -52,6 +52,7 @@ import com.nimbusds.openid.connect.sdk.UserInfoErrorResponse;
import com.nimbusds.openid.connect.sdk.UserInfoResponse;
import com.nimbusds.openid.connect.sdk.UserInfoSuccessResponse;
import com.nimbusds.openid.connect.sdk.claims.IDTokenClaimsSet;
+import com.nimbusds.openid.connect.sdk.claims.LogoutTokenClaimsSet;
import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformationResponse;
import com.nimbusds.openid.connect.sdk.token.OIDCTokens;
@@ -489,6 +490,29 @@ public final class ResponseUtil {
}
}
+ /**
+ * Helper method for getting protocol message for logout token payload.
+ *
+ * @param logoutToken logout token whose payload is included in the message
+ * @param objectMapper object mapper used for pretty printing JSON content
+ * @return The protocol message containing logout token payload
+ * @throws ParseException IF the protocol message cannot be constructed
+ *
+ * @since 4.1.0
+ */
+ @Nonnull public static String getLogoutTokenProtocolMessage(@Nonnull final LogoutTokenClaimsSet logoutToken,
+ @Nonnull final ObjectMapper objectMapper) throws ParseException {
+ try {
+ return getJwtProtocolMessage(logoutToken.toJWTClaimsSet(), objectMapper);
+ } catch (final com.nimbusds.oauth2.sdk.ParseException e) {
+ final Throwable cause = e.getCause();
+ if (cause instanceof ParseException parseException) {
+ throw parseException;
+ }
+ throw new ParseException(e.getMessage(), 0);
+ }
+ }
+
/**
* Helper method for getting protocol message for JWT payload.
*
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/logout/profile/impl/PrepareBackChannelLogoutRequest.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/logout/profile/impl/PrepareBackChannelLogoutRequest.java
index d7b37371..ed53c166 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/logout/profile/impl/PrepareBackChannelLogoutRequest.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/logout/profile/impl/PrepareBackChannelLogoutRequest.java
@@ -14,6 +14,7 @@
package net.shibboleth.idp.plugin.oidc.op.logout.profile.impl;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.nimbusds.oauth2.sdk.id.Audience;
import com.nimbusds.oauth2.sdk.id.Issuer;
import com.nimbusds.oauth2.sdk.id.JWTID;
@@ -21,14 +22,19 @@ import com.nimbusds.oauth2.sdk.id.Subject;
import com.nimbusds.openid.connect.sdk.claims.LogoutTokenClaimsSet;
import com.nimbusds.openid.connect.sdk.claims.SessionID;
+import net.shibboleth.idp.plugin.oidc.op.encoding.impl.ResponseUtil;
import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCBackChannelLogoutPropagationContext;
import net.shibboleth.idp.plugin.oidc.op.session.OIDCRPSession;
+import net.shibboleth.idp.profile.IdPEventIds;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
import net.shibboleth.shared.logic.FunctionSupport;
import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.security.IdentifierGenerationStrategy;
import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
+import org.opensaml.messaging.encoder.AbstractMessageEncoder;
import org.opensaml.profile.action.ActionSupport;
import org.opensaml.profile.action.EventIds;
import org.opensaml.profile.context.ProfileRequestContext;
@@ -37,6 +43,7 @@ import org.slf4j.Logger;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+import java.text.ParseException;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
@@ -52,9 +59,16 @@ public class PrepareBackChannelLogoutRequest extends AbstractOIDCBackChannelLogo
/** Class logger. */
@Nonnull private static final Logger log = LoggerFactory.getLogger(PrepareBackChannelLogoutRequest.class);
+ /** Used to log protocol messages. */
+ @Nonnull private Logger protocolMessageLog =
+ LoggerFactory.getLogger(AbstractMessageEncoder.BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".OIDC");
+
/** Strategy used to locate the {@link IdentifierGenerationStrategy} to use. */
@Nonnull private Function<ProfileRequestContext,IdentifierGenerationStrategy> idGeneratorLookupStrategy;
+ /** Object mapper used for pretty-printing logout token contents. */
+ @NonnullAfterInit private ObjectMapper objectMapper;
+
/** The generator to use. */
@Nullable private IdentifierGenerationStrategy idGenerator;
@@ -91,6 +105,26 @@ public class PrepareBackChannelLogoutRequest extends AbstractOIDCBackChannelLogo
xmlSafeIdentifier = flag;
}
+ /**
+ * Set the object mapper used for pretty-printing logout token contents.
+ *
+ * @param mapper What to set.
+ */
+ public void setObjectMapper(@Nonnull final ObjectMapper mapper) {
+ checkSetterPreconditions();
+ objectMapper = Constraint.isNotNull(mapper, "Object mapper cannot be null");
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected void doInitialize() throws ComponentInitializationException {
+ super.doInitialize();
+
+ if (objectMapper == null) {
+ throw new ComponentInitializationException("Object mapper cannot be null");
+ }
+ }
+
/** {@inheritDoc} */
@Override
protected boolean doPreExecute(@Nonnull ProfileRequestContext profileRequestContext) {
@@ -125,5 +159,13 @@ public class PrepareBackChannelLogoutRequest extends AbstractOIDCBackChannelLogo
final OIDCBackChannelLogoutPropagationContext bcLogoutContext = getOidcBackChannelLogoutContext();
assert bcLogoutContext != null;
bcLogoutContext.setLogoutTokenClaimsSet(logoutTokenClaimsSet);
+ try {
+ assert objectMapper != null;
+ protocolMessageLog.trace("Logout token payload contents:\n{}",
+ ResponseUtil.getLogoutTokenProtocolMessage(logoutTokenClaimsSet, objectMapper));
+ } catch (ParseException e) {
+ log.error("{} Could not produce the protocol logger message", getLogPrefix(), e);
+ ActionSupport.buildEvent(profileRequestContext, IdPEventIds.INVALID_PROFILE_CONFIG);
+ }
}
}
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/BuildAccessToken.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/BuildAccessToken.java
index d8c953d5..47629f09 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/BuildAccessToken.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/BuildAccessToken.java
@@ -612,8 +612,8 @@ public class BuildAccessToken extends AbstractOIDCResponseAction {
accessTokenCtx.setJWT(jwt);
assert objectMapper != null;
- protocolMessageLog.trace("Access token payload contents:\n{}", ResponseUtil.getJwtProtocolMessage(jwt,
- objectMapper));
+ protocolMessageLog.trace("JWT access token payload contents:\n{}",
+ ResponseUtil.getJwtProtocolMessage(jwt, objectMapper));
log.debug("{} Claims stored to JWT access token: {}", getLogPrefix(), claimsSet.serialize());
} else {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContext.java
index 61952caf..0c51c6a7 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContext.java
@@ -31,18 +31,22 @@ import org.apache.hc.core5.http.ClassicHttpRequest;
import org.apache.hc.core5.http.ClassicHttpResponse;
import org.apache.hc.core5.http.HttpStatus;
import org.apache.hc.core5.http.io.entity.EntityUtils;
+import org.opensaml.messaging.encoder.AbstractMessageEncoder;
import org.opensaml.profile.action.ActionSupport;
import org.opensaml.profile.context.ProfileRequestContext;
import org.opensaml.security.httpclient.HttpClientSecurityParameters;
import org.opensaml.security.httpclient.HttpClientSecuritySupport;
import org.slf4j.Logger;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.nimbusds.jwt.JWT;
import com.nimbusds.jwt.JWTParser;
import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
+import net.shibboleth.idp.plugin.oidc.op.encoding.impl.ResponseUtil;
import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
+import net.shibboleth.idp.profile.IdPEventIds;
import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
import net.shibboleth.oidc.profile.core.OidcEventIds;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
@@ -58,7 +62,11 @@ public class SetRequestObjectToResponseContext extends AbstractOAuthAuthorizatio
/** Class logger. */
@Nonnull private Logger log = LoggerFactory.getLogger(SetRequestObjectToResponseContext.class);
-
+
+ /** Used to log protocol messages. */
+ @Nonnull private Logger protocolMessageLog =
+ LoggerFactory.getLogger(AbstractMessageEncoder.BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".OAUTH2");
+
/** HTTP Client used to post the data. */
@NonnullAfterInit private HttpClient httpClient;
@@ -68,6 +76,9 @@ public class SetRequestObjectToResponseContext extends AbstractOAuthAuthorizatio
/** Predicate for enforcing the use of request objects. */
@NonnullAfterInit private Predicate<ProfileRequestContext> requestObjectEnforcedPredicate;
+ /** Object mapper used for pretty-printing JWT contents. */
+ @NonnullAfterInit private ObjectMapper objectMapper;
+
/**
* Set the {@link HttpClient} to use.
*
@@ -97,6 +108,19 @@ public class SetRequestObjectToResponseContext extends AbstractOAuthAuthorizatio
requestObjectEnforcedPredicate = Constraint.isNotNull(predicate,
"Request object enforced predicate annot be null");
}
+
+ /**
+ * Set the object mapper used for pretty-printing JWT contents.
+ *
+ * @param mapper What to set.
+ *
+ * @since 4.1.0
+ */
+ public void setObjectMapper(@Nonnull final ObjectMapper mapper) {
+ checkSetterPreconditions();
+ objectMapper = Constraint.isNotNull(mapper, "Object mapper cannot be null");
+ }
+
/**
* Build the {@link HttpClientContext} instance to be used by the HttpClient.
*
@@ -117,8 +141,15 @@ public class SetRequestObjectToResponseContext extends AbstractOAuthAuthorizatio
@Override
protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
- Constraint.isNotNull(httpClient, "Httpclient cannot be null");
- Constraint.isNotNull(requestObjectEnforcedPredicate, "Request object enforced predicate annot be null");
+ if (httpClient == null) {
+ throw new ComponentInitializationException("Httpclient cannot be null");
+ }
+ if (requestObjectEnforcedPredicate == null) {
+ throw new ComponentInitializationException("Request object enforced predicate cannot be null");
+ }
+ if (objectMapper == null) {
+ throw new ComponentInitializationException("Object mapper cannot be null");
+ }
}
/** {@inheritDoc} */
@@ -159,6 +190,7 @@ public class SetRequestObjectToResponseContext extends AbstractOAuthAuthorizatio
oidcResponseContext.setRequestObject(requestObject);
log.debug("{} Request object {} by value stored to oidc response context", getLogPrefix(),
requestObject.serialize());
+ doProtocolLog(profileRequestContext, requestObject, "Request object payload contents");
return;
}
@@ -194,9 +226,13 @@ public class SetRequestObjectToResponseContext extends AbstractOAuthAuthorizatio
if (response.getCode() == HttpStatus.SC_OK) {
final String requestObjectValue = EntityUtils.toString(response.getEntity());
try {
- oidcResponseContext.setRequestObject(JWTParser.parse(requestObjectValue));
+ final JWT requestObjectByReference = JWTParser.parse(requestObjectValue);
+ assert requestObjectByReference != null;
+ oidcResponseContext.setRequestObject(requestObjectByReference);
log.debug("{} Request object {} by reference stored to oidc response context", getLogPrefix(),
JWTParser.parse(requestObjectValue).serialize());
+ doProtocolLog(profileRequestContext, requestObjectByReference,
+ "Request object (by reference) payload contents");
return;
} catch (final ParseException e) {
log.error("{} Unable to parse request object from request_uri, {}", getLogPrefix(), e.getMessage());
@@ -215,4 +251,23 @@ public class SetRequestObjectToResponseContext extends AbstractOAuthAuthorizatio
return;
}
}
+
+ /**
+ * Create a protocol message containing the pretty-printed contents of the given JWT.
+ *
+ * @param profileRequestContext Profile request context where to publish possible error event
+ * @param jwt The token to be logged
+ * @param messagePrefix The prefix for the protocol log message
+ */
+ protected void doProtocolLog(@Nonnull final ProfileRequestContext profileRequestContext,
+ @Nonnull final JWT jwt, @Nonnull final String messagePrefix) {
+ try {
+ assert objectMapper != null;
+ protocolMessageLog.trace("{}:\n{}", messagePrefix, ResponseUtil.getJwtProtocolMessage(jwt, objectMapper));
+ } catch (ParseException e) {
+ log.error("{} Could not produce the protocol logger message", getLogPrefix(), e);
+ ActionSupport.buildEvent(profileRequestContext, IdPEventIds.INVALID_PROFILE_CONFIG);
+ }
+ }
+
}
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ManipulateClaimsForIDToken.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ManipulateClaimsForIDToken.java
index 12e62534..29dd5cd1 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ManipulateClaimsForIDToken.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ManipulateClaimsForIDToken.java
@@ -178,7 +178,7 @@ public class ManipulateClaimsForIDToken extends AbstractOIDCAuthenticationRespon
@Nonnull final IDTokenClaimsSet claimsSet) {
try {
assert objectMapper != null;
- protocolMessageLog.trace("ID Token payload contents\n:{}",
+ protocolMessageLog.trace("ID Token payload contents:\n{}",
ResponseUtil.getIdTokenProtocolMessage(claimsSet, objectMapper));
} catch (ParseException e) {
log.error("{} Could not produce the protocol logger message", getLogPrefix(), e);
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/logoutprop/oidc/oidc-logout-propagation-beans.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/logoutprop/oidc/oidc-logout-propagation-beans.xml
index 18f9bddc..f5843c90 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/logoutprop/oidc/oidc-logout-propagation-beans.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/logoutprop/oidc/oidc-logout-propagation-beans.xml
@@ -82,7 +82,8 @@
class="net.shibboleth.idp.plugin.oidc.op.logout.profile.impl.PrepareBackChannelLogoutRequest"
scope="prototype"
p:xmlSafeIdentifier="%{idp.oidc.xmlSafeIdentifiers:true}"
- p:identifierGeneratorLookupStrategy-ref="shibboleth.oidc.DefaultIdentifierGenerationStrategy"/>
+ p:identifierGeneratorLookupStrategy-ref="shibboleth.oidc.DefaultIdentifierGenerationStrategy"
+ p:objectMapper-ref="#{'%{idp.oidc.logging.objectMapper:shibboleth.oidc.JSONObjectMapper}'.trim()}" />
<bean id="DefaultLogoutTokenTypeLookupStrategy" parent="shibboleth.Functions.Constant"
c:target="logout+jwt"/>
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-beans.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-beans.xml
index 9be6caa6..613076fe 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-beans.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-beans.xml
@@ -121,7 +121,8 @@
class="net.shibboleth.idp.plugin.oidc.op.oauth2.profile.impl.SetRequestObjectToResponseContext" scope="prototype"
p:httpClient="#{getObject('shibboleth.oidc.NonBrowser.HttpClient') ?: getObject('shibboleth.InternalHttpClient')}"
p:httpClientSecurityParameters="#{getObject('shibboleth.oidc.NonBrowser.HttpClientSecurityParameters')}"
- p:requestObjectEnforcedPredicate-ref="UseRequestObjectPredicate"/>
+ p:requestObjectEnforcedPredicate-ref="UseRequestObjectPredicate"
+ p:objectMapper-ref="#{'%{idp.oidc.logging.objectMapper:shibboleth.oidc.JSONObjectMapper}'.trim()}" />
<bean id="RequestObjectEncryptedCondition" parent="shibboleth.Conditions.Expression"
c:expression="#input.ensureOutboundMessageContext().ensureSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject() instanceof T(com.nimbusds.jwt.EncryptedJWT)" />
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/logout/profile/impl/PrepareBackChannelLogoutRequestTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/logout/profile/impl/PrepareBackChannelLogoutRequestTest.java
index 8edd8d70..72c4a0da 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/logout/profile/impl/PrepareBackChannelLogoutRequestTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/logout/profile/impl/PrepareBackChannelLogoutRequestTest.java
@@ -18,6 +18,7 @@ import org.opensaml.profile.action.EventIds;
import org.testng.Assert;
import org.testng.annotations.Test;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.nimbusds.oauth2.sdk.id.Audience;
import com.nimbusds.openid.connect.sdk.claims.LogoutTokenClaimsSet;
@@ -51,6 +52,7 @@ public class PrepareBackChannelLogoutRequestTest
protected PrepareBackChannelLogoutRequest constructAction(final IdentifierGenerationStrategy strategy) {
final PrepareBackChannelLogoutRequest action = new PrepareBackChannelLogoutRequest();
action.setIdentifierGeneratorLookupStrategy(prc -> strategy);
+ action.setObjectMapper(new ObjectMapper());
try {
action.initialize();
} catch (final ComponentInitializationException e) {
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContextTest.java
index 89c52b58..0270f784 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContextTest.java
@@ -33,6 +33,7 @@ import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.net.UrlEscapers;
import com.nimbusds.jwt.JWTClaimsSet;
import com.nimbusds.jwt.PlainJWT;
@@ -61,6 +62,7 @@ public class SetRequestObjectToResponseContextTest extends BaseOIDCResponseActio
action.setHttpClient(builder.buildClient());
assert enforceRequestObjects != null;
action.setRequestObjectEnforcedPredicate(enforceRequestObjects);
+ action.setObjectMapper(new ObjectMapper());
action.initialize();
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list