这不是一个问题,而是我想分享的发现 上个月,我在不使用 OpenSAML 库替换解析 SAML 2.0 响应的逻辑时遇到了一些挣扎
在这里,我们需要对 SAML 响应进行解码和膨胀。命名空间将相同,因此可用于所有 SAML 响应分析。
我使用了 DOM 解析器。此代码只是为了获取用户名。相同的方法可用于读取签名并解析签名,我将在另一篇文章中展示。
private String decodeSAMLResponseUserIdandSession(String samlEncoded,
String type) throws IOException, ParserConfigurationException,
SAXException {
byte[] decodedValue = DatatypeConverter.parseBase64Binary(samlEncoded);
String tmlXml = new String(decodedValue, "utf-8");
if (!tmlXml.contains(":Response")) {
System.out.println("Inside the Unzip");
decodedValue = inflateValue(decodedValue);
}
String tmlXml2 = new String(decodedValue, "utf-8");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setNamespaceAware(true);
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
StringReader strreader = new StringReader(tmlXml2);
InputSource isstream = new InputSource(strreader);
Document doc = dBuilder.parse(isstream);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagNameNS("urn:oasis:names:tc:SAML:2.0:assertion", "Subject");
System.out.println("----------------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement1 = (Element) nNode;
System.out.println("First Name : "
+ eElement1.getElementsByTagNameNS("urn:oasis:names:tc:SAML:2.0:assertion", "NameID").item(0).getTextContent().toLowerCase());
}
}
}
private static byte[] inflateValue(byte[] decodedValue) throws IOException {
ByteArrayInputStream bis = new ByteArrayInputStream(decodedValue);
Inflater unzipper = new Inflater(true);
InflaterInputStream zipStream = new InflaterInputStream(bis, unzipper);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int read = zipStream.read(buf);
while (read > 0) {
bos.write(buf, 0, read);
read = zipStream.read(buf);
}
zipStream.close();
bos.close();
使用 OpenSAML库没有问题,因为 Oracle 问题指出那里使用了多个版本的 OpenSAML,例如:2.0.0 和 3.0.0。因此,只要您坚持使用一个版本,使用 opensaml jar 就不会有问题。希望这对你有帮助。