1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
package edu.kit.scc.dei.ecplean;
import java.io.IOException;
import java.net.URI;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathException;
import org.apache.http.impl.client.CloseableHttpClient;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
public class ECPIdPAuth extends ECPAuthenticatorBase {
public ECPIdPAuth(String username, String password,
URI idpEcpEndpoint) {
super();
authInfo = new ECPAuthenticationInfo(username, password, idpEcpEndpoint, null);
}
public ECPIdPAuth(CloseableHttpClient client, String username, String password,
URI idpEcpEndpoint) {
super(client);
authInfo = new ECPAuthenticationInfo(username, password, idpEcpEndpoint, null);
}
public String authenticate(String paosMessage) throws ECPAuthenticationException {
Document initResponse;
try {
initResponse = buildDocumentFromString(paosMessage);
} catch (IOException e) {
logger.debug("Parsing SP Request failed");
throw new ECPAuthenticationException(e);
} catch (ParserConfigurationException e) {
logger.debug("Parsing SP Request failed");
throw new ECPAuthenticationException(e);
} catch (SAXException e) {
logger.debug("Parsing SP Request failed");
throw new ECPAuthenticationException(e);
}
String relayState;
try {
relayState = (String) queryDocument(initResponse, "//ecp:RelayState", XPathConstants.STRING);
} catch (XPathException e) {
logger.debug("Could not find relay state in PAOS answer from SP");
throw new ECPAuthenticationException(e);
}
logger.info("Got relayState: " + relayState);
String responseConsumerUrl;
try {
responseConsumerUrl = (String) queryDocument(initResponse, "/S:Envelope/S:Header/paos:Request/@responseConsumerURL", XPathConstants.STRING);
} catch (XPathException e) {
logger.debug("Could not find response consumer url in PAOS answer from SP");
throw new ECPAuthenticationException(e);
}
logger.info("Got responseConsumerUrl: " + responseConsumerUrl);
Node firstChild = initResponse.getDocumentElement().getFirstChild();
initResponse.getDocumentElement().removeChild(firstChild);
Document idpResponse = authenticateIdP(initResponse);
idpResponse.getDocumentElement().getFirstChild().getFirstChild().setTextContent(relayState);
try {
return documentToString(idpResponse);
} catch (TransformerException e) {
logger.debug("documentToString failed");
throw new ECPAuthenticationException(e);
}
}
}
|