В OpenSAML существует MetadataServiceResponse, который, по-видимому, может использоваться как часть установки ADFS WS-Fed (/FederationMetadata3/2007-06/FederationMetadata.xml).
Однако я не могу создать универсальный RoleDescriptor или найти примеры того, кто это сделал.
Кто-нибудь заставил Java выступить в качестве поставщика доверия утверждений для ADFS, и если да, то какие-нибудь примеры?Глядя внимательно, кажется редким.
спасибо!
MetadataServiceResponse mdResponse = metadataService.execute(new MetadataServiceRequest());
KeyInfo keyInfo = new KeyInfoBuilder().buildObject();
List<X509Data> x509datas = keyInfo.getX509Datas();
X509Data x509Data = new X509DataBuilder().buildObject();
List<X509Certificate> x509certs = x509Data.getX509Certificates();
X509Certificate x509Cert = new X509CertificateBuilder().buildObject();
x509Cert.setValue(Base64.getEncoder().encodeToString(mdResponse.getSigningKey().getEntityCertificate().getEncoded()));
x509certs.add(x509Cert);
x509datas.add(x509Data);
Signature signature = buildSAMLObject(Signature.class, Signature.DEFAULT_ELEMENT_NAME);
signature.setSigningCredential(mdResponse.getSigningKey());
signature.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
signature.setCanonicalizationAlgorithm(SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
signature.setKeyInfo(keyInfo);
EntityDescriptor ed = new EntityDescriptorBuilder().buildObject();
ed.setEntityID("https://myserver:8443/adfs/services/trust");
ed.setID(UUID.randomUUID().toString());
ed.setSignature(signature);
EntityDescriptorMarshaller aMarsh = new EntityDescriptorMarshaller();
try {
aMarsh.marshall(ed);
} catch (MarshallingException ex){
LOGGER.error("marshalling exception", ex);
}
Signer.signObject(signature); //Generates SignatureValue