首页 > 解决方案 > 有没有人用 Java 为 ADFS 创建了声明信任提供程序?

问题描述

在 OpenSAML 中有一个 MetadataServiceResponse,看起来它可以用作 WS-Fed ADFS 设置 (/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

标签: javasamlopensaml

解决方案


推荐阅读