示例SAML Java配置。项目,从一开始就破碎

时间:2015-08-20 19:12:41

标签: java spring spring-security saml-2.0 spring-saml

我为Spring的SAML扩展提供了示例Java configuration project。在我写这个问题时,似乎没有对该项目做出约六个月的承诺。除了针对它运行maven package之外,我没有对这个项目做过任何事情。

然后我在Spring Tool Suite中运行应用程序作为Spring Boot应用程序并运行应用程序;但是,应用程序不会在没有错误的情况下运行,并且应用程序端点无法访问(导致错误消息):“错误:在身份验证过程中出现问题”。

我没有注册任何证书等(可能非常需要)。 GitHub项目没有提供启动或使用该应用程序的说明。我故意没有发布项目的内容,因为我没有修改它。

有关错误的资料

来自Chrome Dev。工具,我可以看到从500 Internal Server Error应用程序请求返回的localhost:8080。所以,问题肯定在于示例应用程序(或者我没有做过的事情)。

在应用程序部署上将以下错误记录到控制台(我已经包含了图像和文本,因为文本很难格式化):

Error logged to console

文字:

  

[2015-08-20 14:41:40.551] boot - 9908 INFO [localhost-startStop-1]   --- HttpMethodDirector:处理时捕获的I / O异常(javax.net.ssl.SSLPeerUnverifiedException)   请求:SSL对等失败主机名验证名称:46.4.112.4
   [2015-08-20 14:41:40.551] boot - 9908 INFO [localhost-startStop-1]   --- HttpMethodDirector:重试请求
   [2015-08-20 14:41:40.795] boot - 9908 ERROR [localhost-startStop-1] --- HTTPMetadataProvider:   从https://idp.ssocircle.com/idp-meta.xml检索元数据时出错    javax.net.ssl.SSLPeerUnverifiedException:SSL对等方失败的主机名   名称验证:46.4.112.4
  at org.opensaml.ws.soap.client.http.TLSProtocolSocketFactory.verifyHostname(TLSProtocolSocketFactory.java:233)
  在   org.opensaml.ws.soap.client.http.TLSProtocolSocketFactory.createSocket(TLSProtocolSocketFactory.java:194)

我访问了ssocircle提供的url端点,并公开了元数据。

如果我访问服务提供商的/saml/metadata端点并获得一些有用的信息:org.opensaml.saml2.metadata.provider.MetadataProviderException例外。描述是否“未配置IDP,请更新包含至少一个IDP的元数据”;然而,这可能是上述错误的来源。

问题

我是否遗漏了启动示例应用程序时显而易见的内容?换句话说,这个错误告诉我我需要调查什么?或者,因为它是“非破坏性的”,我会忽略它吗?

为什么我要求

有关Sample Java Configuration应用程序部署的文档很少(如“不存在”)。自我文档仅提供“提示”,如下所示:

 // IDP Metadata configuration - paths to metadata of IDPs in circle of trust is here
 // Do no forget to call initialize method on providers
 @Bean
 @Qualifier("metadata")
 public CachingMetadataManager metadata() throws MetadataProviderException {
      List<MetadataProvider> providers = new ArrayList<MetadataProvider>();
      providers.add(ssoCircleExtendedMetadataProvider());
      return new CachingMetadataManager(providers);
 }

我确信有些事我没有做,特别是因为我没有在应用程序的部署中做任何事情,除了上面描述的mvn package的运行。

3 个答案:

答案 0 :(得分:1)

由于示例应用程序使用了不推荐使用的构造函数(对于HTTPMetadataProvider已明确禁止其警告的弃用)而出现此问题(我将很快提交修复)。在配置ExtendedMetadataDelegate时,使用了two-parametered constructor

    @Bean
    @Qualifier("idp-ssocircle")
    public ExtendedMetadataDelegate ssoCircleExtendedMetadataProvider() throws MetadataProviderException {  
        @SuppressWarnings({ "deprecation"})
        HTTPMetadataProvider httpMetadataProvider = new HTTPMetadataProvider("https://idp.ssocircle.com/idp-meta.xml", 5000);
        // other config.s...
    }

如果替换为带有java.util.Timerorg.apache.commons.httpclient.HttpClient的非弃用构造函数(除了元数据网址),示例应用程序也能正常工作,并且不会记录任何错误。

其他非OP相关信息

我必须执行以下操作才能运行示例SAML应用

删除不推荐使用的构造函数后,我建议做两件事:

  1. 按照4.2.6 of the documentation中列出的步骤操作,即在安装过程中将应用程序视为XML配置的应用程序。需要采取所有步骤来注册&#34; metada。应用程序将无法使用当前的Java配置注册其元数据(参见下文;第2点)
  2. 更改班级WebSecurityConfig中的默认配置(详见下方)
  3. 配置更改

    ExtendedMetadataDelegate bean ssoCircleExtendedMetadataProvider的配置中,更改ExtendedMetadataDelegate的属性值,如下所示:

    // code....
    extendedMetadataDelegate.setMetadataTrustCheck(true);
    extendedMetadataDelegate.setMetadataRequireSignature(false);
    // code....
    

    ExtendedMetadata bean(与上面不同)中,更改属性值如下:

    // code....
    extendedMetadata.setIdpDiscoveryEnabled(true); 
    extendedMetadata.setSignMetadata(false);
    // code....
    

    &#34;声明&#34;

    这是否应该用于生产,我不知道;但是,它似乎更好地反映了SAML Spring Documentation

    中引用的XML配置的服务提供者示例的基于XML的配置和结果元数据

答案 1 :(得分:0)

只是一些提示:

我在尝试设置HTTP-Artifact配置文件时遇到了此异常。

org.opensaml.ws.soap.client.http.TLSProtocolSocketFactory(openws-1.5.1)中有一个hostnameVerifier,在OpenSAML尝试创建套接字以连接到其他主机之前进行verifyHostname()处理。

我在sslHostnameVerification中将org.springframework.security.saml.metadata.ExtendedMetadata配置为“allowAll”,允许的值为“default”,“defaultAndLocalhost”,“strict”和“allowAll”。

在您的情况下,当SP(您的saml示例)尝试从IdP(ssocircle)下载 metadata.xml 时,会抛出此异常。弄清楚发生了什么的最好方法是调试设置hostnameVerifier的时间和地点。

或者您可以尝试在SSOCircle的ExtendedMetadataDelegate的ExtendedMetadata中将sslHostnameVerification设置为“allowAll”以首先尝试...

答案 2 :(得分:0)

checkout this answer:它基本上描述了我最近发布的一个插件,它允许你以这种方式配置Spring Boot和Spring Security SAML:

SequentialExample

有几个Demo应用程序与SSO Circle集成