KEYCLOAK-5236
This commit is contained in:
parent
527c61b287
commit
8d81a4a2e4
2 changed files with 39 additions and 3 deletions
|
@ -407,8 +407,8 @@ public abstract class AbstractSamlAuthenticationHandler implements SamlAuthentic
|
||||||
|
|
||||||
SubjectType subject = assertion.getSubject();
|
SubjectType subject = assertion.getSubject();
|
||||||
SubjectType.STSubType subType = subject.getSubType();
|
SubjectType.STSubType subType = subject.getSubType();
|
||||||
NameIDType subjectNameID = (NameIDType) subType.getBaseID();
|
NameIDType subjectNameID = subType == null ? null : (NameIDType) subType.getBaseID();
|
||||||
String principalName = subjectNameID.getValue();
|
String principalName = subjectNameID == null ? null : subjectNameID.getValue();
|
||||||
|
|
||||||
final Set<String> roles = new HashSet<>();
|
final Set<String> roles = new HashSet<>();
|
||||||
MultivaluedHashMap<String, String> attributes = new MultivaluedHashMap<>();
|
MultivaluedHashMap<String, String> attributes = new MultivaluedHashMap<>();
|
||||||
|
@ -473,7 +473,7 @@ public abstract class AbstractSamlAuthenticationHandler implements SamlAuthentic
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
URI nameFormat = subjectNameID.getFormat();
|
URI nameFormat = subjectNameID == null ? null : subjectNameID.getFormat();
|
||||||
String nameFormatString = nameFormat == null ? JBossSAMLURIConstants.NAMEID_FORMAT_UNSPECIFIED.get() : nameFormat.toString();
|
String nameFormatString = nameFormat == null ? JBossSAMLURIConstants.NAMEID_FORMAT_UNSPECIFIED.get() : nameFormat.toString();
|
||||||
final SamlPrincipal principal = new SamlPrincipal(assertion, principalName, principalName, nameFormatString, attributes, friendlyAttributes);
|
final SamlPrincipal principal = new SamlPrincipal(assertion, principalName, principalName, nameFormatString, attributes, friendlyAttributes);
|
||||||
String index = authn == null ? null : authn.getSessionIndex();
|
String index = authn == null ? null : authn.getSessionIndex();
|
||||||
|
|
|
@ -96,6 +96,12 @@ import java.security.PublicKey;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import javax.xml.xpath.XPath;
|
||||||
|
import javax.xml.xpath.XPathConstants;
|
||||||
|
import javax.xml.xpath.XPathExpression;
|
||||||
|
import javax.xml.xpath.XPathFactory;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
import org.w3c.dom.NodeList;
|
||||||
import static org.hamcrest.Matchers.*;
|
import static org.hamcrest.Matchers.*;
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
import static org.keycloak.representations.idm.CredentialRepresentation.PASSWORD;
|
import static org.keycloak.representations.idm.CredentialRepresentation.PASSWORD;
|
||||||
|
@ -1056,6 +1062,36 @@ public abstract class AbstractSAMLServletsAdapterTest extends AbstractServletsAd
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNameIDUnset() throws Exception {
|
||||||
|
new SamlClientBuilder()
|
||||||
|
.navigateTo(employee2ServletPage.toString())
|
||||||
|
.processSamlResponse(Binding.POST).build()
|
||||||
|
.login().user(bburkeUser).build()
|
||||||
|
.processSamlResponse(Binding.POST)
|
||||||
|
.transformDocument(responseDoc -> {
|
||||||
|
XPathFactory xPathfactory = XPathFactory.newInstance();
|
||||||
|
XPath xpath = xPathfactory.newXPath();
|
||||||
|
XPathExpression expr = xpath.compile("//*[local-name()='NameID']");
|
||||||
|
|
||||||
|
NodeList nodeList = (NodeList) expr.evaluate(responseDoc, XPathConstants.NODESET);
|
||||||
|
assertThat(nodeList.getLength(), is(1));
|
||||||
|
|
||||||
|
final Node nameIdNode = nodeList.item(0);
|
||||||
|
nameIdNode.getParentNode().removeChild(nameIdNode);
|
||||||
|
|
||||||
|
return responseDoc;
|
||||||
|
})
|
||||||
|
.build()
|
||||||
|
|
||||||
|
.navigateTo(employee2ServletPage.toString())
|
||||||
|
|
||||||
|
.execute(r -> {
|
||||||
|
assertThat(r, statusCodeIsHC(Response.Status.OK));
|
||||||
|
assertThat(r, bodyHC(allOf(containsString("principal="), not(containsString("500")))));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// KEYCLOAK-4329
|
// KEYCLOAK-4329
|
||||||
@Test
|
@Test
|
||||||
public void testEmptyKeyInfoElement() {
|
public void testEmptyKeyInfoElement() {
|
||||||
|
|
Loading…
Reference in a new issue