如何将 Spring SAML 示例应用程序连接到 Weblogic IDP?
How can I connect the Spring SAML example application to a Weblogic IDP?
- 我在此处下载了 Spring SAML 示例应用程序:
http://docs.spring.io/spring-security-saml/docs/current/reference/htmlsingle/#quick-start-steps
- 我 运行 应用程序并成功通过 SSOCircle IDP 的身份验证。
- 然后我尝试切换到 Weblogic IDP,但是当我尝试身份验证时,失败并出现异常。
异常堆栈跟踪:
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)
在日志中还有另一条消息说:
No artifact resolution service endpoint defined for the entity null
- 如何使工件解析成功?我调试了应用程序,发现方法 org.opensaml.saml2.binding.artifact.SAML2ArtifactType0004Builder#getAcsEndpoint ()returns null,导致上面的异常。我不太确定这意味着什么或如何让它发挥作用。
- 我导出 IDP 元数据并将其包含在元数据提供程序 bean 中,然后导出 SP 元数据并将其作为联合合作伙伴元数据上传到 Weblogic。 我是不是漏掉了什么?
我试图让示例应用程序针对 Weblogic IDP 和 Shibboleth IDP 进行身份验证,但我没能成功。要么配置不完整,要么我缺少一些基本的东西。
您使用的是哪个 Weblogic 版本?至少在旧版本中,Oracle 顾问告诉我 Weblogic 的 SAML IDP 支持不是 "production quality" 并且实现确实存在问题(例如使用旧库,不支持 SAML 加密,处理错误),但它可能已经改变自从.
错误 "No artifact resolution service endpoint" 表明您的 IDP 的元数据在其元数据中没有 ArtifactResolutionEndpoint。在你的地方,我会尝试使用 HTTP-POST 绑定而不是 Artifact.
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)
- Select SAML2CredentialMappertype
- 保存新映射
1.1.3。点击新建映射
- 转到提供商特定选项卡
输入一个颁发者 URI:
保存映射
2。配置 SAML 属性
2.1。导航至服务器页面
- 打开管理服务器的服务器条目。
- 记下“常规”选项卡上“侦听地址”和“侦听端口”的值。
2.2。导航到联合身份验证服务 > SAML 2.0 常规
为已发布站点输入一个值URL(主机和端口应与您在上一步中记下的值相同) :
输入一个实体 ID(请注意,此 ID 必须与您之前输入的 Issuer URI 相同)
必须与凭据映射中的颁发者 URI 相同。
- 保存设置
2.3。切换到 SAML 2.0 身份提供商选项卡
- 选中启用的复选框。
- Select POST 作为首选绑定。
- 保存设置。
3。交换元数据信息
3.1。导出 IDP 元数据
服务提供商(SSO 客户端)应用程序使用身份提供商元数据文件来确定登录 URL 和其他有用信息。
3.1.1。导航到联合身份验证服务 > SAML 2.0 常规
- 单击“发布元数据”按钮。
- Select 元数据文件的文件名
- 通过在路径文本字段中输入路径/文件名
- 或者选择目录结构中的现有文件(您必须选中“覆盖”复选框以覆盖文件)
- 单击“确定”导出元数据文件。
3.2。在服务提供商应用程序中使用元数据文件
服务提供商应用程序需要知道在哪里可以找到 IDP。此信息包含在 IDP 元数据文件中。
3.3。获取服务提供商元数据文件
IDP 还需要了解服务提供商(SSO 客户端)。
您需要获取 SP 元数据文件。
3.4。配置服务提供商合作伙伴
- 导航到您之前创建的凭据映射。
- 转到“管理”选项卡。
- 创建新的 Web 单一登录服务提供商合作伙伴。
- 选择一个名称(或保留默认名称)
- Select SP 元数据文件,方法是导航到目录并选择目录结构中的现有文件
- 单击“确定”保存新合作伙伴。
- 单击新的服务提供商合作伙伴。
- 选中启用的复选框。
- 点击保存。
链接
- 我在此处下载了 Spring SAML 示例应用程序: http://docs.spring.io/spring-security-saml/docs/current/reference/htmlsingle/#quick-start-steps
- 我 运行 应用程序并成功通过 SSOCircle IDP 的身份验证。
- 然后我尝试切换到 Weblogic IDP,但是当我尝试身份验证时,失败并出现异常。
异常堆栈跟踪:
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)
在日志中还有另一条消息说:
No artifact resolution service endpoint defined for the entity null
- 如何使工件解析成功?我调试了应用程序,发现方法 org.opensaml.saml2.binding.artifact.SAML2ArtifactType0004Builder#getAcsEndpoint ()returns null,导致上面的异常。我不太确定这意味着什么或如何让它发挥作用。
- 我导出 IDP 元数据并将其包含在元数据提供程序 bean 中,然后导出 SP 元数据并将其作为联合合作伙伴元数据上传到 Weblogic。 我是不是漏掉了什么?
我试图让示例应用程序针对 Weblogic IDP 和 Shibboleth IDP 进行身份验证,但我没能成功。要么配置不完整,要么我缺少一些基本的东西。
您使用的是哪个 Weblogic 版本?至少在旧版本中,Oracle 顾问告诉我 Weblogic 的 SAML IDP 支持不是 "production quality" 并且实现确实存在问题(例如使用旧库,不支持 SAML 加密,处理错误),但它可能已经改变自从.
错误 "No artifact resolution service endpoint" 表明您的 IDP 的元数据在其元数据中没有 ArtifactResolutionEndpoint。在你的地方,我会尝试使用 HTTP-POST 绑定而不是 Artifact.
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)
- Select SAML2CredentialMappertype
- 保存新映射
1.1.3。点击新建映射
- 转到提供商特定选项卡
输入一个颁发者 URI:
保存映射
2。配置 SAML 属性
2.1。导航至服务器页面
- 打开管理服务器的服务器条目。
- 记下“常规”选项卡上“侦听地址”和“侦听端口”的值。
2.2。导航到联合身份验证服务 > SAML 2.0 常规
为已发布站点输入一个值URL(主机和端口应与您在上一步中记下的值相同) :
输入一个实体 ID(请注意,此 ID 必须与您之前输入的 Issuer URI 相同)
必须与凭据映射中的颁发者 URI 相同。
- 保存设置
2.3。切换到 SAML 2.0 身份提供商选项卡
- 选中启用的复选框。
- Select POST 作为首选绑定。
- 保存设置。
3。交换元数据信息
3.1。导出 IDP 元数据
服务提供商(SSO 客户端)应用程序使用身份提供商元数据文件来确定登录 URL 和其他有用信息。
3.1.1。导航到联合身份验证服务 > SAML 2.0 常规
- 单击“发布元数据”按钮。
- Select 元数据文件的文件名
- 通过在路径文本字段中输入路径/文件名
- 或者选择目录结构中的现有文件(您必须选中“覆盖”复选框以覆盖文件)
- 单击“确定”导出元数据文件。
3.2。在服务提供商应用程序中使用元数据文件
服务提供商应用程序需要知道在哪里可以找到 IDP。此信息包含在 IDP 元数据文件中。
3.3。获取服务提供商元数据文件
IDP 还需要了解服务提供商(SSO 客户端)。 您需要获取 SP 元数据文件。
3.4。配置服务提供商合作伙伴
- 导航到您之前创建的凭据映射。
- 转到“管理”选项卡。
- 创建新的 Web 单一登录服务提供商合作伙伴。
- 选择一个名称(或保留默认名称)
- Select SP 元数据文件,方法是导航到目录并选择目录结构中的现有文件
- 单击“确定”保存新合作伙伴。
- 单击新的服务提供商合作伙伴。
- 选中启用的复选框。
- 点击保存。
链接