2017-05-23 17 views
0

내 응용 프로그램에 OpenSAML 3.3을 통합하고 있으며 모든 URL을 하드 코딩하는 대신 구성 XML을 사용하고 싶습니다. 그러나OpenSAML3.3 FederationService.xml (adfs)을 올바르게 읽는 방법은 무엇입니까?

InitializationService.initialize(); 
    FilesystemMetadataResolver idpMetaDataProvider = new FilesystemMetadataResolver(new File("/home/raudenaerde/sso/FederationMetadata.xml")); 
    idpMetaDataProvider.setRequireValidMetadata(true); 
    idpMetaDataProvider.setParserPool(new BasicParserPool()); 
    idpMetaDataProvider.initialize(); 

,이 날이 준 :

내가 ADFS의 예를 들어 같은 XML 파일을 받았다

, 그것은 'FederationMetadata.xml'

이 내가 그것을 읽는 데 사용되는 조각입니다입니다 오류 : 스레드 "주요"net.shibboleth.utilities.java.support.component.ComponentInitializationException에서

예외 : 구성 요소 식별자는 null 일 수 없습니다

OpenSAML 2.6.4를 사용하는 github 프로젝트 (https://github.com/coveo/saml-client)를 사용하여 읽는 데 문제가 없었지만 최신 버전 3.3을 사용하고 싶습니다.

일부 기본 설정이 누락 되었습니까?

답변

0

는 고정하여 필요에 2 일이 다음과 같습니다 BasicParserPool 필요가뿐만 아니라 초기화 할 initialize()

  • 전에 ID를 가지고 있어야 OpenSaml V3 많은 클래스 인스턴스에서

    1. , setId(String)를 호출해야합니다.

    전체 작업 코드 :

    InitializationService.initialize(); 
    
        FilesystemMetadataResolver idpMetaDataProvider = new FilesystemMetadataResolver(new File("/home/raudenaerde/sso/FederationMetadata.xml")); 
        idpMetaDataProvider.setRequireValidMetadata(true); 
        idpMetaDataProvider.setId("myId"); 
        BasicParserPool pool = new BasicParserPool(); 
    
        pool.initialize(); 
        idpMetaDataProvider.setParserPool(pool); 
        idpMetaDataProvider.initialize(); 
    
        for (EntityDescriptor idpEntityDescriptor : idpMetaDataProvider) 
        { 
    
         System.out.println(idpEntityDescriptor.getID()); 
         for (SingleSignOnService sss : idpEntityDescriptor.getIDPSSODescriptor(SAMLConstants.SAML20P_NS).getSingleSignOnServices()) 
         { 
          if (sss.getBinding().equals(SAMLConstants.SAML2_REDIRECT_BINDING_URI)) 
          { 
           System.out.println(sss.getLocation()); 
          } 
    
         } 
         for (ArtifactResolutionService ars : idpEntityDescriptor.getIDPSSODescriptor(SAMLConstants.SAML20P_NS).getArtifactResolutionServices()) 
         { 
          if (ars.getBinding().equals(SAMLConstants.SAML2_SOAP11_BINDING_URI)) 
          { 
           System.out.println(ars.getLocation()); 
          } 
         } 
        }