2016-04-14 4 views
0

私は解決できないような深刻な問題があります。私はここで春のブートの例を使用しています:https://github.com/vdenotaris/spring-boot-security-saml-sample新しいSPを統合する。 HttpMetaDataProviderを使用するとすべてうまくいっていましたが、最近はFileSystemMetadataProviderを使用するように変更しなければならず、状況がうまくいかないことがあります。私は取得しています認証要求を行う際にSpring SAML MetadataManageがArtifactResolutionProfileBaseではnullですが、メタデータが正しくロードされています

私のメタデータのすべてが正しくロードされているようだけど:

org.springframework.security.saml.websso.ArtifactResolutionProfileBase.resolveArtifact(ArtifactResolutionProfileBase.java:77)

問題をデバッグしましたが、ArtifactResolutionProfileBaseでMetadataManagerがnullであるように見えますが、理由はわかりません。ここで

は私の設定です:

// Setup advanced info about metadata 
@Bean 
@Qualifier("idp-extended-metadata") 
public ExtendedMetadata idpExtendedMetadata() { 
    ExtendedMetadata extendedMetadata = new ExtendedMetadata(); 
    return extendedMetadata; 
} 

// Setup advanced info about metadata 
@Bean 
@Qualifier("sp-extended-metadata") 
public ExtendedMetadata spExtendedMetadata() { 
    ExtendedMetadata extendedMetadata = new ExtendedMetadata(); 
    //sp meta data needs local set 
    extendedMetadata.setLocal(true); 
    extendedMetadata.setIdpDiscoveryEnabled(false); 
    extendedMetadata.setIdpDiscoveryResponseURL(environment.getProperty("sp.base.url")); 
    extendedMetadata.setSignMetadata(false); 
    extendedMetadata.setSigningKey("student-saml"); 
    extendedMetadata.setEncryptionKey("student-saml"); 
    extendedMetadata.setRequireArtifactResolveSigned(false); 
    extendedMetadata.setRequireLogoutRequestSigned(false); 
    extendedMetadata.setRequireLogoutResponseSigned(false); 
    return extendedMetadata; 
} 

@Bean 
@Qualifier("ccc-idp") 
public ExtendedMetadataDelegate CCCIdpExtendedMetadataProvider() 
     throws MetadataProviderException, IOException { 
    DefaultResourceLoader loader = new DefaultResourceLoader(); 
    Resource metadatafile = loader.getResource("classpath:" + environment.getProperty("ccc.idp.metadatafile")); 
    FilesystemMetadataProvider filesystemMetadataProvider = new FilesystemMetadataProvider(metadatafile.getFile()); 
    filesystemMetadataProvider.setParserPool(parserPool()); 
    ExtendedMetadataDelegate extendedMetadataDelegate = 
      new ExtendedMetadataDelegate(filesystemMetadataProvider, idpExtendedMetadata()); 
    extendedMetadataDelegate.setMetadataTrustCheck(false); 
    extendedMetadataDelegate.setMetadataRequireSignature(false); 
    extendedMetadataDelegate.initialize(); 
    return extendedMetadataDelegate; 
} 

@Bean 
@Qualifier("student-sp-metadata") 
public ExtendedMetadataDelegate studentSPMetadata() 
     throws MetadataProviderException, IOException { 
    DefaultResourceLoader loader = new DefaultResourceLoader(); 
    Resource metadatafile = loader.getResource("classpath:" + environment.getProperty("student.sp.metadatafile")); 
    FilesystemMetadataProvider filesystemMetadataProvider = new FilesystemMetadataProvider(metadatafile.getFile()); 
    filesystemMetadataProvider.setParserPool(parserPool()); 
    ExtendedMetadataDelegate extendedMetadataDelegate = 
      new ExtendedMetadataDelegate(filesystemMetadataProvider, spExtendedMetadata()); 
    extendedMetadataDelegate.setMetadataTrustCheck(false); 
    extendedMetadataDelegate.setMetadataRequireSignature(false); 
    extendedMetadataDelegate.initialize(); 
    return extendedMetadataDelegate; 
} 


// Do not forget to call iniitalize method on providers 
@Bean 
@Qualifier("metadata") 
public MetadataManager metadata() throws MetadataProviderException, IOException { 
    List<MetadataProvider> providers = new ArrayList<MetadataProvider>(); 
    ExtendedMetadataDelegate spMeta = studentSPMetadata(); 
    ExtendedMetadataDelegate idpMeta = CCCIdpExtendedMetadataProvider(); 
    providers.add(idpMeta); 
    providers.add(spMeta); 
    MetadataManager meta = new MetadataManager(providers); 
    meta.setHostedSPName(environment.getProperty("sp.entity.id")); 
    meta.setKeyManager(keyManager()); 
    return meta; 
} 

任意の助けをいただければ幸いです!

答えて

0

artifactResolutionProfileにMetadataManagerを追加できます。これは私のために働いた。

名前付け規則に従い、CCCIdpExtendedMetadataProviderメソッドの名前を変更して、小文字で始める必要があります。

private ArtifactResolutionProfile artifactResolutionProfile() throws MetadataProviderException, ResourceException { 
    final ArtifactResolutionProfileImpl artifactResolutionProfile = 
      new ArtifactResolutionProfileImpl(httpClient()); 
    artifactResolutionProfile.setProcessor(new SAMLProcessorImpl(soapBinding())); 
    List<MetadataProvider> providers = new ArrayList<MetadataProvider>(); 
    providers.add(CCCIdpExtendedMetadataProvider()); 
    MetadataManager metadataManager = new MetadataManager(providers); 
    artifactResolutionProfile.setMetadata(metadataManager); 
    metadataManager.refreshMetadata(); 
    return artifactResolutionProfile; 
    } 
関連する問題