如何将Spring SAML示例应用程序连接到Weblogic IDP?

时间:2015-06-18 11:05:34

标签: weblogic saml-2.0 spring-saml

  1. 我在这里下载了Spring SAML示例应用程序: http://docs.spring.io/spring-security-saml/docs/current/reference/htmlsingle/#quick-start-steps
  2. 我运行了该应用程序并成功通过SSOCircle IDP验证。
  3. 然后我尝试切换到Weblogic IDP,但是当我尝试进行身份验证时,它会失败并出现异常。
  4. 异常堆栈跟踪:

    Jun 17, 2015 10:33:31 AM org.apache.catalina.core.StandardWrapperValve invoke
        SEVERE: Servlet.service() for servlet [default] in context with path [] threw exception [org.opensaml.ws.message.encoder.MessageEncodingException: Unable to builder artifact for message to relying party] with root cause
        org.opensaml.ws.message.encoder.MessageEncodingException: Unable to builder artifact for message to relying party
                at org.opensaml.saml2.binding.encoding.HTTPArtifactEncoder.buildArtifact(HTTPArtifactEncoder.java:232)
                at org.opensaml.saml2.binding.encoding.HTTPArtifactEncoder.getEncode(HTTPArtifactEncoder.java:195)
                at org.opensaml.saml2.binding.encoding.HTTPArtifactEncoder.doEncode(HTTPArtifactEncoder.java:137)
                at org.opensaml.ws.message.encoder.BaseMessageEncoder.encode(BaseMessageEncoder.java:52)
                at org.springframework.security.saml.processor.SAMLProcessorImpl.sendMessage(SAMLProcessorImpl.java:227)
                at org.springframework.security.saml.processor.SAMLProcessorImpl.sendMessage(SAMLProcessorImpl.java:195)
                at org.springframework.security.saml.websso.AbstractProfileBase.sendMessage(AbstractProfileBase.java:144)
                at org.springframework.security.saml.websso.WebSSOProfileImpl.sendAuthenticationRequest(WebSSOProfileImpl.java:105)
                at org.springframework.security.saml.SAMLEntryPoint.initializeSSO(SAMLEntryPoint.java:226)
                at org.springframework.security.saml.SAMLEntryPoint.commence(SAMLEntryPoint.java:153)
                at org.springframework.security.saml.SAMLEntryPoint.doFilter(SAMLEntryPoint.java:107)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
                at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
                at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:166)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
                at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
                at org.springframework.security.saml.metadata.MetadataGeneratorFilter.doFilter(MetadataGeneratorFilter.java:87)
                at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
                at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
                at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
                at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
                at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
                at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
                at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
                at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
                at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
                at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
                at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
                at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
                at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
                at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
                at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
                at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
                at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
                at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
                at java.lang.Thread.run(Thread.java:745)
    

    在日志中还有另一条消息:

      

    没有为实体null

    定义的工件解析服务端点
    1. 如何才能使工件解析成功?我调试了应用程序,发现方法org.opensaml.saml2.binding.artifact.SAML2ArtifactType0004Builder#getAcsEndpoint()返回null,这会导致上面的例外。我不确定这意味着什么,或者做些什么来使它发挥作用。
    2. 我导出了IDP元数据并将其包含在元数据提供程序bean中,然后导出SP元数据并将其作为联合伙伴元数据上载到Weblogic中。 我错过了什么吗?
    3. 我尝试使示例应用程序针对Weblogic IDP和Shibboleth IDP进行身份验证,但我没有设法使其正常工作。配置不完整或我遗漏了一些基本的东西。

2 个答案:

答案 0 :(得分:1)

<强> 1。添加凭据映射

要启用SAML功能,我们首先需要添加凭据映射。 打开Weblogic管理控制台

http://server:port/console
e.g.
http://127.0.0.1:7101/console

<强> 1.1。添加映射条目

<强> 1.1.1。导航到“凭据映射”页面:

Security Realms > myrealm > Providers > Credential Mapping

<强> 1.1.2。点击新按钮

  • 输入映射的名称(例如SamlCredentialMapper)
  • 选择 SAML2CredentialMappertype
  • 保存新映射

<强> 1.1.3。单击新映射

<强> 2。配置SAML属性

<强> 2.1。导航到“服务器”页面

  • 打开管理服务器的服务器条目。
  • 请注意“常规”选项卡上的“侦听地址”和“侦听端口”的值。

<强> 2.2。导航到联合身份验证服务&gt; SAML 2.0一般

  • 输入已发布网站网址的值(主机和端口应与您在上一步中记下的值相同):

    e.g。 http://localhost:7101/saml2

  • 输入实体ID (请注意,此ID必须与您之前输入的颁发者URI相同)

    e.g。 http://www.server.com/issuer

  • 必须与凭据映射中的颁发者URI相同。

  • 保存设置

<强> 2.3。切换到SAML 2.0标识提供程序选项卡

  • 选中已启用的复选框。
  • 选择POST作为优先绑定。
  • 保存设置。

第3。交换元数据信息

<强> 3.1。导出IDP元数据

服务提供商(SSO客户端)应用程序使用身份提供程序元数据文件来确定登录URL和其他有用信息。

<强> 3.1.1。导航到联合身份验证服务&gt; SAML 2.0一般

  • 点击发布元数据按钮。
  • 选择元数据文件的文件名
    • 在路径文本字段中输入路径/文件名
    • 或者通过选择目录结构中的现有文件(您必须选中“覆盖”复选框以覆盖该文件)
  • 单击“确定”以导出元数据文件。

<强> 3.2。使用服务提供商应用程序中的元数据文件

服务提供商应用程序需要知道在哪里可以找到IDP。此信息包含在IDP元数据文件中。

<强> 3.3。获取服务提供商元数据文件

IDP也需要了解服务提供商(SSO客户端)。 您需要获取SP元数据文件。

<强> 3.4。配置服务提供商合作伙伴

  • 导航到您之前创建的凭据映射。
  • 转到“管理”标签。
  • 创建新的Web单点登录服务提供商合作伙伴。
  • 选择一个名称(或保留默认值)
  • 通过导航到目录并选择目录结构中的现有文件来选择SP元数据文件
  • 单击“确定”以保存新合作伙伴。
  • 点击新的服务提供商合作伙伴。
  • 选中已启用的复选框。
  • 点击保存。

<强>链接

答案 1 :(得分:0)

您使用的是哪个Weblogic版本?至少在旧版本中,Oracle顾问告诉我,Weblogic的SAML IDP支持不是&#34;生产质量&#34;并且实现确实存在问题(例如使用旧库,不支持SAML加密,处理错误),但它可能已经发生了变化。

错误&#34;没有工件解析服务端点&#34;表明您的IDP元数据在其元数据中没有ArtifactResolutionEndpoint。在你的位置我尝试使用HTTP-POST绑定而不是Artifact。