我在运行Windows_Server-2008-R2_SP1-English-64Bit-Base-2014.04.09的AWS EC2上安装了PingFederate.我有一个使用Spring Security进行身份验证的Java应用程序.
我已经了解了如何使用PingFederate,我可以设置身份提供商(IdP)和服务提供商(SP).我已经收集到IdP将是提供登录凭据(身份)的应用程序用户,并将此传递给SP,该SP在此页面的此图中具有SP的目标应用程序:
http://documentation.pingidentity.com/display/PF66/Service+Providers+and+Identity+Providers
此图像还显示了IdP和SP两侧的联合身份软件.
我已经使用我的本地PingFederate服务器创建了一个IdP和SP,只是为了查看配置选项是什么,我很困惑,我实际上需要能够为我的Spring Security应用程序提供SSO.
我的问题是:
我是否需要一个IdP和SP来实现我想要做的事情.
现在我们的用户名和密码存储在SQL Server中,我会利用它来PingFederate来验证用户吗?
我是否应该为此使用Spring Security SAML,或者其他路由更合适?
感谢您的帮助,我已经联系了PingFederate,但我的区域解决方案架构师恰好在周五之前.
如果我完全不在思考,我也会道歉,我正在努力将我的想法包围在需要的地方.
我正在使用spring security saml扩展以ADFS作为IDP来实现SSO。
据我了解,Spring Security使用开放的saml对SHA1withRSA作为签名算法的SAML请求进行签名。
我们需要进行更改以改为使用SHA256withRSA签名SAML请求。
如何才能做到这一点 ?
感谢对此的任何建议。首先十分感谢
我使用spring security的开放式saml库进行身份验证.
我的服务提供商是我的spring web应用程序,配置了spring saml.我的IDP是OpenSSO.
在spring-security-saml2-core库中,永远不会调用JKSKeyManager,但会调用KeyManager.
那么库是使用.jks密钥库文件作为密钥还是'apollo/nalle123'作为密钥?他们的区别是什么?
Spring SAML Extension似乎忽略了在IDP xml中配置的查询字符串参数.这是配置
<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://<provier host>/saml/?query1=xxx&query2=yyy"/>
Run Code Online (Sandbox Code Playgroud)
1)当SSO请求被重定向时,SAML扩展似乎在之后剥离了什么?并仅发送SAMLRequest查询字符串参数.
2)我还想根据一些配置修改查询字符串参数值,这样我就可以点击环境特定的端点进行测试和开发
有没有办法在重定向之前拦截重定向请求以满足上述需求?
我看过很多问题,包括/sf/answers/1776944711/。我有 IdP 元数据和证书,但似乎无法获得 Spring,所以请查看。
我启用了调试日志,这就是我得到的:
我正在为我的 SP 使用 Spring Security SAML 扩展。从 IDP 对用户进行身份验证后,SP 会使用某种方法来允许后续调用不必通过 IDP 重新进行身份验证。这是如何在 Spring Security SAML 扩展中完成的?
一个相关的问题: 根据 SAML IDP 对移动用户进行身份验证
在上述相关问题的公认答案中,SP 应创建一个令牌并将其传递回客户端以供将来请求。在 Chrome 的网络工具中观看流程时,我没有看到类似的内容。我应该寻找什么?
更新 1:我得出的结论是 Spring SAML 不会以令牌的形式将任何内容传递回浏览器。它必须在服务器端跟踪用户。我可以得到确认吗?在 REST 调用的情况下,是否可以生成令牌传递回客户端?
我正在尝试将我的 Spring Boot 项目配置为针对第三方 IDP 使用 SAML 身份验证。我已经实现了使vdenotaris的配置与 SSOCircle 提供程序一起使用,现在我想将其切换到其他提供程序。
SAML 元数据端点启用了 HTTPS,我已经使用元数据中提供的证书(用于签名和加密)和 HTTP 端点提供的证书(基于此答案)创建了一个密钥库。然后,我将它们保存在证书文件 ($CERTIFICATE_FILE) 中,并使用此脚本生成我的密钥库:
keytool -delete -alias third-party -keystore $KEYSTORE_FILE -storepass $KEYSTORE_PASSWORD
keytool -import -alias third-party -file $CERTIFICATE_FILE -keystore $KEYSTORE_FILE -storepass $KEYSTORE_PASSWORD -noprompt
keytool -genkeypair -alias mycompany -keypass mycompanypass -keystore $KEYSTORE_FILE
Run Code Online (Sandbox Code Playgroud)
然后,当使用此密钥库检索 SAML 元数据时,我收到此错误:
org.opensaml.saml2.metadata.provider.MetadataProviderException: org.opensaml.saml2.metadata.provider.MetadataProviderException: Error retrieving metadata from https://third.party.provider/metadata
at org.opensaml.saml2.metadata.provider.HTTPMetadataProvider.fetchMetadata(HTTPMetadataProvider.java:274)
at org.opensaml.saml2.metadata.provider.AbstractReloadingMetadataProvider.refresh(AbstractReloadingMetadataProvider.java:267)
at org.opensaml.saml2.metadata.provider.AbstractReloadingMetadataProvider.doInitialization(AbstractReloadingMetadataProvider.java:236)
at org.opensaml.saml2.metadata.provider.AbstractMetadataProvider.initialize(AbstractMetadataProvider.java:407)
at org.springframework.security.saml.metadata.ExtendedMetadataDelegate.initialize(ExtendedMetadataDelegate.java:167)
at org.springframework.security.saml.metadata.MetadataManager.initializeProvider(MetadataManager.java:412)
at org.springframework.security.saml.metadata.MetadataManager.refreshMetadata(MetadataManager.java:238)
at org.springframework.security.saml.metadata.CachingMetadataManager.refreshMetadata(CachingMetadataManager.java:86)
at org.springframework.security.saml.metadata.MetadataManager$RefreshTask.run(MetadataManager.java:1040)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505) …
Run Code Online (Sandbox Code Playgroud) 我已经使用 spring SAML 实现了 SSO,我想知道是否有任何方法可以请求 IDP(在我的例子中为ssocircle.com)向我发送其他属性以及它已经发送的 nameID。假设我希望 IdP 向我发送已成功通过身份验证的人员的 accountID。我进行了很多搜索并找到了一些建议,例如:
重写WebSSOProfileImpl .java 中的getAuthnRequest方法,以便发送到 IdP 的 authnRequest 具有此属性集。但我不知道如何继续下去?我是否也必须使用此附加属性名称和格式修改我的 SP 元数据?如果是,我该怎么做?或者可以使用 RelayState 参数来完成某些操作吗?在这方面的任何帮助将不胜感激。
谢谢,
阿比拉什
我在我的系统中实现了SAML 2.0(我扮演的是SP角色).
当我将IDP与远程元数据集成时,一切正常,这是通过URL提供给我的.
我正在尝试与向我发送元数据的IDP集成,但出于某种原因,它不起作用.
我试过了:
@Bean @Qualifier("idp-ssocircle") public ExtendedMetadataDelegate ssoCircleExtendedMetadataProvider() throws MetadataProviderException { ClasspathResource metadata = null; try { metadata = new ClasspathResource("/saml/metadata/sso.xml"); logger.info("Metadata Exists!!"); } catch (Exception e) { logger.debug("Can't fetch metadata!!!"); } Timer timer = new Timer(true); ResourceBackedMetadataProvider provider = new ResourceBackedMetadataProvider(timer,metadata); return new ExtendedMetadataDelegate(provider, extendedMetadata()); }
我也尝试过:
@Bean @Qualifier("idp-ssocircle") public ExtendedMetadataDelegate ssoExtendedMetadataProvider() throws MetadataProviderException { File metadata = null; try { metadata = new File("C:\\my-path\\saml\\metadata\\sso.xml"); logger.info("Metadata Exists!!"); } catch (Exception e) { logger.debug("Can't fetch metadata!!!"); } FilesystemMetadataProvider …
我试图通过使用我的应用程序作为服务提供商和 WSO2 服务器作为 idp 来实现 SAML 2.0 是我的应用程序。我已经下载并实现了 spring-security-saml2-sample 应用程序,并将其修改为与 WSO2 服务器作为 idp 一起使用,并且示例应用程序按预期工作。
我现在尝试将 securityContext.xml 和相关配置合并到我的应用程序中,但是在元数据生成过程中遇到异常。
例外情况如下:
java.lang.IllegalArgumentException: Manager with name 'MetadataKeyInfoGenerator' does not exist
at org.opensaml.xml.security.keyinfo.NamedKeyInfoGeneratorManager.getFactory(NamedKeyInfoGeneratorManager.java:157)
at org.opensaml.xml.security.SecurityHelper.getKeyInfoGenerator(SecurityHelper.java:1065)
at org.springframework.security.saml.metadata.MetadataGenerator.generateKeyInfoForCredential(MetadataGenerator.java:255)
at org.springframework.security.saml.metadata.MetadataGenerator.getServerKeyInfo(MetadataGenerator.java:211)
at org.springframework.security.saml.metadata.MetadataGenerator.buildSPSSODescriptor(MetadataGenerator.java:329)
at org.springframework.security.saml.metadata.MetadataGenerator.generateMetadata(MetadataGenerator.java:189)
at org.springframework.security.saml.metadata.MetadataGeneratorFilter.processMetadataInitialization(MetadataGeneratorFilter.java:127)
at org.springframework.security.saml.metadata.MetadataGeneratorFilter.doFilter(MetadataGeneratorFilter.java:86)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
Run Code Online (Sandbox Code Playgroud)
我的 securityContext.xml 元数据配置如下
java.lang.IllegalArgumentException: Manager with name 'MetadataKeyInfoGenerator' does not exist
at org.opensaml.xml.security.keyinfo.NamedKeyInfoGeneratorManager.getFactory(NamedKeyInfoGeneratorManager.java:157)
at org.opensaml.xml.security.SecurityHelper.getKeyInfoGenerator(SecurityHelper.java:1065)
at org.springframework.security.saml.metadata.MetadataGenerator.generateKeyInfoForCredential(MetadataGenerator.java:255)
at org.springframework.security.saml.metadata.MetadataGenerator.getServerKeyInfo(MetadataGenerator.java:211)
at org.springframework.security.saml.metadata.MetadataGenerator.buildSPSSODescriptor(MetadataGenerator.java:329)
at org.springframework.security.saml.metadata.MetadataGenerator.generateMetadata(MetadataGenerator.java:189)
at org.springframework.security.saml.metadata.MetadataGeneratorFilter.processMetadataInitialization(MetadataGeneratorFilter.java:127)
at org.springframework.security.saml.metadata.MetadataGeneratorFilter.doFilter(MetadataGeneratorFilter.java:86)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
Run Code Online (Sandbox Code Playgroud)
我没有对示例应用程序 securityContext.xml 进行任何重大更改。有没有人遇到过类似的错误。任何帮助将非常感激。
请在下面找到我的整个 securityContext.xml
<!-- Enable …
Run Code Online (Sandbox Code Playgroud) spring-saml ×10
saml ×4
saml-2.0 ×4
spring ×3
java ×2
certificate ×1
metadata ×1
opensso ×1
pingfederate ×1
spring-boot ×1