0

I am trying to configure SAML authentication using Spring's SAML extension. While trying it in the annotation way using Java Configuration. I have a requirement of getting the IDP metadata file and the SP metadata file to create the metadataManager bean.

Here is the relevant configuration:

@Bean(name="idpMetadata")
public ExtendedMetadataDelegate idpMetaData(){
    FilesystemMetadataProvider metadataProvider = null;
    try {
        metadataProvider = new FilesystemMetadataProvider(idpMetadataFile);
        metadataProvider.setParserPool(parserPool());
    }
    catch (MetadataProviderException e) {
        e.printStackTrace();
    }
    ExtendedMetadataDelegate metaDataDelegate = 
        new ExtendedMetadataDelegate(metadataProvider, new ExtendedMetadata());
    return metaDataDelegate;
}

@Bean(name="spMetadata")
public ExtendedMetadataDelegate spMetaData(){
    FilesystemMetadataProvider metadataProvider = null;
    try {
        metadataProvider = new FilesystemMetadataProvider(spMetadataFile);
        metadataProvider.setParserPool(parserPool());
    }
    catch (MetadataProviderException e) {
        e.printStackTrace();
    }

    ExtendedMetadata extendedMetadata = new ExtendedMetadata();
    extendedMetadata.setLocal(true);
    extendedMetadata.setAlias("defaultAlias");
    extendedMetadata.setSecurityProfile("metaiop");
    extendedMetadata.setSslSecurityProfile("pkix");
    extendedMetadata.setRequireArtifactResolveSigned(true);
    extendedMetadata.setRequireLogoutRequestSigned(true);
    extendedMetadata.setRequireLogoutResponseSigned(false);
    extendedMetadata.setIdpDiscoveryEnabled(false);

    ExtendedMetadataDelegate metaDataDelegate = 
        new ExtendedMetadataDelegate(metadataProvider, extendedMetadata);
    return metaDataDelegate;
}

My problem is I am not able to get the file content here. The spMetadataFile and the idpMetadataFile are null. I am not sure how can I inject or get old of these files if stored in the classpath of the project.

Please help.

dharam
  • 7,882
  • 15
  • 65
  • 93
  • it is not clear how spMetadataFile and idpMetadataFile are populated but it seems you can autowire ResourceLoader and use it like resourceLoader.getResource("classpath:filepath").getFile(); to get a file. – Ritesh Jun 16 '14 at 02:30

1 Answers1

0

This code works fine on my own SP-implementation:

@Bean
@Qualifier("yourMetadataProvider")
public ExtendedMetadataDelegate yourMetadataProvider()
        throws MetadataProviderException, IOException {
    String path = "<metadata_path>";
    FilesystemMetadataProvider filesystemMetadataProvider = new FilesystemMetadataProvider(
            new File(path));
    filesystemMetadataProvider.setParserPool(parserPool());
    ExtendedMetadataDelegate emd = new ExtendedMetadataDelegate(
            filesystemMetadataProvider, new ExtendedMetadata());

    // Your config
    emd.setLocal(true);
    emd.setAlias("defaultAlias");
    emd.setSecurityProfile("metaiop");
    emd.setSslSecurityProfile("pkix");
    emd.setRequireArtifactResolveSigned(true);
    emd.setRequireLogoutRequestSigned(true);
    emd.setRequireLogoutResponseSigned(false);
    emd.setIdpDiscoveryEnabled(false);

    return emd;
}

Be careful when setting the path of your metadata file.

vdenotaris
  • 13,297
  • 26
  • 81
  • 132