opensaml を使用して Java で xbox saml2 トークンを復号化しようとしています。私が従おうとしている手順は次のとおりです1. saml2トークンxmlをsaml2オブジェクトに変換します2.署名を検証します3.オブジェクトを復号化します
saml2 xml のアンマーシャリング中に例外が発生します。コードはアンマーシャラーを見つけることができません。
トークン サンプル saml2 xml。
<xenc:EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<e:EncryptedKey xmlns:e="http://www.w3.org/2001/04/xmlenc#">
<e:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p">
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
</e:EncryptionMethod>
<KeyInfo>
<o:SecurityTokenReference xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<X509Data>
<X509IssuerSerial>
<X509IssuerName>CN=LVISPXBOX01.istreamplanet.isp</X509IssuerName>
<X509SerialNumber>26119146566321683660382502106101553957</X509SerialNumber>
</X509IssuerSerial>
</X509Data>
</o:SecurityTokenReference>
</KeyInfo>
<e:CipherData>
<e:CipherValue></e:CipherValue>
</e:CipherData>
</e:EncryptedKey>
</KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>token value</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
アンマーシャリングに使用されるコード
private String decryptSAML(String filePath){
try {
DefaultBootstrap.bootstrap();
InputStream in = getClass().getResourceAsStream(filePath);
// Get parser pool manager
BasicParserPool ppMgr = new BasicParserPool();
ppMgr.setNamespaceAware(true);
Document inCommonMDDoc = ppMgr.parse(in);
Element metadataRoot = inCommonMDDoc.getDocumentElement();
System.out.println("First element of InCommon data was not expected EntitiesDescriptor"+metadataRoot.toString());
// Get apropriate unmarshaller
UnmarshallerFactory unmarshallerFactory = Configuration.getUnmarshallerFactory();
Unmarshaller unmarshaller = unmarshallerFactory.getUnmarshaller(metadataRoot);
System.out.println("unmarshaller" +unmarshaller);
EncryptedAssertion encryptedAssertion = (EncryptedAssertion)unmarshaller.unmarshall(metadataRoot);
List<EncryptedKey> encList=encryptedAssertion.getEncryptedKeys();
System.out.println("encList "+encList.isEmpty());
System.out.println("encList "+encList.size());
for(EncryptedKey encryptedKey:encList){
System.out.println(encryptedKey);
}
} catch (XMLParserException xe) {
System.err.println("Unable to parse XML file: " + xe);
} catch (UnmarshallingException ue) {
System.err.println("Unable to unmarshall XML: " + ue);
}
return null;
}
これから暗号化されたキーを抽出できません。私は何を間違っていますか
unmarshallerFactory がマーシャラーを見つけることができません。nullとして返されます。
誰かがこれで私を助けることができれば、本当に感謝しています。これに関するドキュメントはまばらに見えます。