首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenSAML3.3读取(adfs) FederationService.xml的正确方法?

OpenSAML3.3读取(adfs) FederationService.xml的正确方法?
EN

Stack Overflow用户
提问于 2017-05-23 12:19:02
回答 1查看 1.1K关注 0票数 0

我正在将OpenSAML 3.3集成到我的应用程序中,而不是硬编码所有urls等等,我希望能够使用配置XML。

为adfs实例提供了这样一个XML文件,它是“FederationMetadata.xml”。

这是我用来读它的片段:

代码语言:javascript
复制
    InitializationService.initialize();
    FilesystemMetadataResolver idpMetaDataProvider = new FilesystemMetadataResolver( new File("/home/raudenaerde/sso/FederationMetadata.xml") );
    idpMetaDataProvider.setRequireValidMetadata(true);
    idpMetaDataProvider.setParserPool(new BasicParserPool());
    idpMetaDataProvider.initialize();

但是,这给了我一个错误:

线程"main“> net.shibboleth.utilities.java.support.component.ComponentInitializationException:>组件标识符中的异常不能为空

使用使用https://github.com/coveo/saml-client 2.6.4的github项目,我阅读它没有问题,但我想继续使用最新版本3.3。

我是不是错过了一些基本的设计?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-23 16:52:23

有两件事需要修复:

  1. 在OpenSaml v3中,许多类实例都需要有一个ID,必须在initialize()之前调用setId(String)
  2. BasicParserPool也需要初始化。

完整的工作代码:

代码语言:javascript
复制
    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() );
            }
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44134637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档