我做了spring saml教程中描述的所有事情,除了添加
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.4.01</version>
</dependency>
在pom.xml中克服一个W3.DOM类找不到的问题。当我运行示例项目时,我在浏览器中得到HTTP状态401-身份验证失败:错误解码传入SAML消息
,同时(CertPathPkixTrusteValuator.java:81)错误org.springframework.security.SAML.trust.MetadataCredentialResolver-不受信任凭据的PKIX路径构造失败:[subjectName='cn=idp.ssocircle.com'credential Entityid='https://idp.ssocircle.com']:在控制台中找不到请求目标的有效证书路径
。
第2天:运行keytool-importcert-alias identtrustca-file ca.cer-keystore samlkeystore.jks
,并将security/samlkeystore.jks
替换为新生成的samlkeystore.jks。securitycontext.xml
:
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="classpath:security/samlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="nalle123"/>
<constructor-arg>
<map>
<entry key="apollo" value="nalle123"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="apollo"/>
</bean>
那么我有:
Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect
at sun.security.provider.JavaKeyStore.engineLoad(Unknown Source)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(Unknown Source)
at java.security.KeyStore.load(Unknown Source)
at org.springframework.security.saml.key.JKSKeyManager.initialize(JKSKeyManager.java:117)
... 57 more
Caused by: java.security.UnrecoverableKeyException: Password verification failed
... 61 more
然后使用在使用keytool
时输入的密码更改密码:
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="classpath:security/samlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="123456"/>
<constructor-arg>
<map>
<entry key="apollo" value="123456"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="apollo"/>
</bean>
则控制台显示:
Servlet.service() for servlet [jsp] in context with path [/spring-security-saml2-sample] threw exception
java.lang.RuntimeException: Key for alias apollo not found
at org.springframework.security.saml.metadata.MetadataGenerator.getServerKeyInfo(MetadataGenerator.java:201)
因此,我将apollo
更改为identtrustca
:
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="classpath:security/samlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="123456"/>
<constructor-arg>
<map>
<entry key="identtrustca" value="123456"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="identtrustca"/>
</bean>
控制台显示:
Servlet.service() for servlet [jsp] in context with path [/spring-security-saml2-sample] threw exception
java.lang.UnsupportedOperationException: trusted certificate entries are not password-protected
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="classpath:security/samlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="123456"/>
<constructor-arg>
<map/>
</constructor-arg>
<constructor-arg type="java.lang.String" value="identtrustca"/>
</bean>
Servlet.service() for servlet [jsp] in context with path [/spring-security-saml2-sample] threw exception
java.lang.RuntimeException: Key with alias identtrustca doesn't have a private key
我不明白为什么SP从IdP元数据中获得公钥,却仍然需要IdP的ca.cer?我相信来自auth网站的ca.cer是IDP的证书,尽管它不同于我通过openssl s_client-connect idp.ssocircle.com:443-showcerts
获得的证书
而且,现在不是得到错误解码传入SAML消息
而是得到HTTP状态401-身份验证失败:响应问题时间太早或日期在将来
第3天,当我启动SP时,从chrome和firefox访问http://localhost:8080/spring-security-saml2-sample/时,当我在一个资源管理器中按下global logout并刷新另一个时,它没有显示一个注销页面。我认为对于SSO,从同一SP全局注销应该忽略多会话,例如,一旦我在一个“登录”中全局注销,而我应该在另一个“登录”中自动注销,我也应该在另一个资源管理器中看到一个注销页面(如果我刷新)。实际上,对于多个SP,一个我登出一个,我应该能够看到登出在所有的SP,我曾经登录。
通过更改saml项目url,您需要修改idp.ssocircle.com(manage metadata)中的元数据。否则,idp网站将显示错误。这是用docs/reference/htmlsingle/index.html编写的
IDP元数据中的证书用于对SAML XML文档进行数字签名。您失败的证书来自www.ssocircle.com的HTTPSendpoint,您的Spring SAML在工件解析期间调用该endpoint。这两个证书通常是不同的。
SSOCircle最近更改了为www.SSOCircle.com颁发证书的证书颁发机构,在SAML Error:PKIX path construction failed for untrusted credential中描述的操作是使该CA受信任。
您最近的错误可能是由于Spring SAML机器上的时间没有正确同步造成的。
我已经使用Spring SAML实现了SSO,一切都运行良好。到目前为止,它与以下IDP合作:1)idp.ssocircle.com 2)openidp . feide . no 现在,我正在使用 salesforce.com 作为我的标识提供者进行测试。由于没有上传服务提供商元数据的规定,我在其 IdP 上完成了以下配置设置: 提供了我的entityID和断言使用者服务URL。我还上传了我的SP
我正试图将我的spinnaker应用程序与OKTA集成。我在Okta创建了应用程序。 Spinnaker仪表板应用程序配置: 我已经相应地配置了gate-local.yml文件。 SAML: 当我点击url时,我会被重定向到Okta登录页面。一旦我成功登录,我会得到错误消息如下
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.3.xsd“>
我想在这里指出:我已经添加了SHA1指纹。我该怎么解决这个? *不确定这是否有帮助,但我已经一步一步地遵循了本教程