KEYCLOAK-4360: Add OneTimeUse condition to SAMLResponse
Add OneTimeUse Condition to SAMLResponse when configured in client settings
This commit is contained in:
1 parent
16d5ca3378
commit
c78c0b73d3
11 files changed
+217
-60
No files matched your search
@@ -21,7 +21,9 @@ import org.keycloak.dom.saml.v2.assertion.AssertionType;
|
||||
import org.keycloak.dom.saml.v2.assertion.AudienceRestrictionType;
|
||||
import org.keycloak.dom.saml.v2.assertion.AuthnStatementType;
|
||||
import org.keycloak.dom.saml.v2.assertion.ConditionsType;
|
||||
import org.keycloak.dom.saml.v2.assertion.OneTimeUseType;
|
||||
import org.keycloak.dom.saml.v2.assertion.SubjectConfirmationDataType;
|
||||
import org.keycloak.dom.saml.v2.protocol.ExtensionsType;
|
||||
import org.keycloak.dom.saml.v2.protocol.ResponseType;
|
||||
import org.keycloak.saml.common.PicketLinkLogger;
|
||||
import org.keycloak.saml.common.PicketLinkLoggerFactory;
|
||||
@@ -41,7 +43,6 @@ import org.w3c.dom.Document;
|
||||
import java.net.URI;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import org.keycloak.dom.saml.v2.protocol.ExtensionsType;
|
||||
|
||||
import static org.keycloak.saml.common.util.StringUtil.isNotNull;
|
||||
|
||||
@@ -68,7 +69,7 @@ public class SAML2LoginResponseBuilder implements SamlProtocolExtensionsAwareBui
|
||||
protected String requestIssuer;
|
||||
protected String sessionIndex;
|
||||
protected final List<NodeGenerator> extensions = new LinkedList<>();
|
||||
|
||||
protected boolean includeOneTimeUseCondition;
|
||||
|
||||
public SAML2LoginResponseBuilder sessionIndex(String sessionIndex) {
|
||||
this.sessionIndex = sessionIndex;
|
||||
@@ -110,12 +111,12 @@ public class SAML2LoginResponseBuilder implements SamlProtocolExtensionsAwareBui
|
||||
}
|
||||
|
||||
public SAML2LoginResponseBuilder requestID(String requestID) {
|
||||
this.requestID =requestID;
|
||||
this.requestID = requestID;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SAML2LoginResponseBuilder requestIssuer(String requestIssuer) {
|
||||
this.requestIssuer =requestIssuer;
|
||||
this.requestIssuer = requestIssuer;
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -140,6 +141,11 @@ public class SAML2LoginResponseBuilder implements SamlProtocolExtensionsAwareBui
|
||||
return this;
|
||||
}
|
||||
|
||||
public SAML2LoginResponseBuilder includeOneTimeUseCondition(boolean includeOneTimeUseCondition) {
|
||||
this.includeOneTimeUseCondition = includeOneTimeUseCondition;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SAML2LoginResponseBuilder addExtension(NodeGenerator extension) {
|
||||
this.extensions.add(extension);
|
||||
@@ -217,7 +223,11 @@ public class SAML2LoginResponseBuilder implements SamlProtocolExtensionsAwareBui
|
||||
assertion.addStatement(authnStatement);
|
||||
}
|
||||
|
||||
if (! this.extensions.isEmpty()) {
|
||||
if (includeOneTimeUseCondition) {
|
||||
assertion.getConditions().addCondition(new OneTimeUseType());
|
||||
}
|
||||
|
||||
if (!this.extensions.isEmpty()) {
|
||||
ExtensionsType extensionsType = new ExtensionsType();
|
||||
for (NodeGenerator extension : this.extensions) {
|
||||
extensionsType.addExtension(extension);
|
||||
|
||||
+10
-3
@@ -31,6 +31,7 @@ import org.keycloak.dom.saml.v2.assertion.ConditionAbstractType;
|
||||
import org.keycloak.dom.saml.v2.assertion.ConditionsType;
|
||||
import org.keycloak.dom.saml.v2.assertion.EncryptedElementType;
|
||||
import org.keycloak.dom.saml.v2.assertion.NameIDType;
|
||||
import org.keycloak.dom.saml.v2.assertion.OneTimeUseType;
|
||||
import org.keycloak.dom.saml.v2.assertion.StatementAbstractType;
|
||||
import org.keycloak.dom.saml.v2.assertion.SubjectType;
|
||||
import org.keycloak.dom.saml.v2.assertion.URIType;
|
||||
@@ -99,7 +100,8 @@ public class SAMLAssertionWriter extends BaseWriter {
|
||||
}
|
||||
|
||||
if (conditions.getNotOnOrAfter() != null) {
|
||||
StaxUtil.writeAttribute(writer, JBossSAMLConstants.NOT_ON_OR_AFTER.get(), conditions.getNotOnOrAfter().toString());
|
||||
StaxUtil.writeAttribute(writer, JBossSAMLConstants.NOT_ON_OR_AFTER.get(),
|
||||
conditions.getNotOnOrAfter().toString());
|
||||
}
|
||||
|
||||
List<ConditionAbstractType> typeOfConditions = conditions.getConditions();
|
||||
@@ -121,6 +123,11 @@ public class SAMLAssertionWriter extends BaseWriter {
|
||||
|
||||
StaxUtil.writeEndElement(writer);
|
||||
}
|
||||
if (typeCondition instanceof OneTimeUseType) {
|
||||
StaxUtil.writeStartElement(writer, ASSERTION_PREFIX, JBossSAMLConstants.ONE_TIME_USE.get(),
|
||||
ASSERTION_NSURI.get());
|
||||
StaxUtil.writeEndElement(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -237,8 +244,8 @@ public class SAMLAssertionWriter extends BaseWriter {
|
||||
if (uriTypes != null) {
|
||||
for (URIType uriType : uriTypes) {
|
||||
if (uriType instanceof AuthnContextDeclType) {
|
||||
StaxUtil.writeStartElement(writer, ASSERTION_PREFIX,
|
||||
JBossSAMLConstants.AUTHN_CONTEXT_DECLARATION.get(), ASSERTION_NSURI.get());
|
||||
StaxUtil.writeStartElement(writer, ASSERTION_PREFIX, JBossSAMLConstants.AUTHN_CONTEXT_DECLARATION.get(),
|
||||
ASSERTION_NSURI.get());
|
||||
StaxUtil.writeCharacters(writer, uriType.getValue().toASCIIString());
|
||||
StaxUtil.writeEndElement(writer);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user