小编SM *_*MAR的帖子

受信任的证书条目不受密码保护的Spring SAML

我通过复制我计划连接的IDP的509条目生成了testIdp.cer文件.然后我通过执行以下命令创建了JKS文件

keytool -importcert -alias adfssigning -keystore C:\Users\user\Desktop\samlKeystore.jks -file    C:\Users\user\Desktop\testIdp.cer
Run Code Online (Sandbox Code Playgroud)

执行时,它要求输入我已给出密码的密码.对于"信任这个证书?[no]:"这个问题,我给出了"y"作为输入.消息出现为"证书已添加到密钥库".

然后我在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="mypassword"/>
    <constructor-arg>
        <map>
            <entry key="adfssigning" value="mypassword"/>
        </map>
    </constructor-arg>
    <constructor-arg type="java.lang.String" value="adfssigning"/>
</bean>

<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
  <property name="alias" value="adfssigning" />
  <property name="signingKey" value="adfssigning"/>     
</bean>
Run Code Online (Sandbox Code Playgroud)

但是当我运行应用程序时,我在服务器启动时以及加载应用程序的主页时会遇到以下两个异常.如果我错过任何其他内容,任何人都可以告诉我.

启动服务器时发生此异常

Caused by: org.opensaml.saml2.metadata.provider.FilterException: Signature trust establishment failed for metadata entry
at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.verifySignature(SignatureValidationFilter.java:327)
at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.processEntityGroup(SignatureValidationFilter.java:240)
at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.doFilter(SignatureValidationFilter.java:158)
at org.opensaml.saml2.metadata.provider.AbstractMetadataProvider.filterMetadata(AbstractMetadataProvider.java:493)
at org.opensaml.saml2.metadata.provider.AbstractReloadingMetadataProvider.processNonExpiredMetadata(AbstractReloadingMetadataProvider.java:395)
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序的主页时,会发生此异常

java.lang.UnsupportedOperationException: trusted certificate entries are not password-protected
at java.security.KeyStoreSpi.engineGetEntry(Unknown Source)
at java.security.KeyStore.getEntry(Unknown Source)
at org.opensaml.xml.security.credential.KeyStoreCredentialResolver.resolveFromSource(KeyStoreCredentialResolver.java:132)
Run Code Online (Sandbox Code Playgroud)

ssl spring spring-security x509 spring-saml

15
推荐指数
2
解决办法
2万
查看次数

spring saml:如何处理LOGOUT?在IDP元数据xml中是否必须具有注销端点?

我正在使用Spring SAML实现.SSO圈元数据xml具有注销端点,有助于本地注销和全局注销.但是我还在与其他IDP进行交互,并且没有在其元数据xml中使用注销端点.

在这些情况下应该如何处理LOGOUT?

删除请求的cookie是此问题的唯一解决方案还是有针对此方案的解决方法?

非常感谢您在这方面的帮助.

spring spring-security logout saml-2.0 spring-saml

8
推荐指数
1
解决办法
8256
查看次数

如何在同一应用程序中使用 spring-sample 示例配置 spring 安全基本身份验证和 SAML 身份验证

我有一个使用 spring 安全基本身份验证的应用程序,它根据数据库验证用户详细信息。有一组特定的用户会根据 SSO 数据库进行验证。使用 SAML,我能够针对 SSO 数据库进行验证。

但问题是如何在单个应用程序中集成基本身份验证和 SAML 身份验证,并将用户定向到特定身份验证。另一个原因,两者都使用不同的身份验证提供程序。

我使用 spring-saml 示例来配置 SAML。

另一个问题是拦截 url 模式。在下面的配置中,两个安全配置都没有映射到 PATTERN 属性,因为服务器启动时出现异常,因为有两个配置映射到 /**(任何请求)。如何解决这个异常?

例如:

<security:http access-denied-page="/saml/web/metadata/login">
    <security:form-login login-processing-url="/saml/web/login" login-page="/saml/web/metadata/login" default-target-url="/saml/web/metadata"/>
    <security:intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <security:intercept-url pattern="/logout" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <security:intercept-url pattern="/home" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <security:custom-filter before="FIRST" ref="metadataGeneratorFilter"/>
</security:http>

<security:http pattern="/saml/mysignin" entry-point-ref="samlEntryPoint">
    <security:intercept-url pattern="/saml/mysignin" access="IS_AUTHENTICATED_FULLY"/>
    <security:custom-filter before="FIRST" ref="metadataGeneratorFilter"/>
    <security:custom-filter after="BASIC_AUTH_FILTER" ref="samlFilter"/>
</security:http>

<bean id="samlFilter" class="org.springframework.security.web.FilterChainProxy">
    <security:filter-chain-map request-matcher="ant">
        <security:filter-chain pattern="/saml/login/**" filters="samlEntryPoint"/>
        <security:filter-chain pattern="/saml/logout/**" filters="samlLogoutFilter"/>
        <security:filter-chain pattern="/saml/metadata/**" filters="metadataDisplayFilter"/>
        <security:filter-chain pattern="/saml/SSO/**" filters="samlWebSSOProcessingFilter"/>
        <security:filter-chain pattern="/saml/SSOHoK/**" filters="samlWebSSOHoKProcessingFilter"/>
        <security:filter-chain pattern="/saml/SingleLogout/**" filters="samlLogoutProcessingFilter"/>
        <security:filter-chain pattern="/saml/discovery/**" filters="samlIDPDiscovery"/> …
Run Code Online (Sandbox Code Playgroud)

authentication spring saml spring-saml

5
推荐指数
1
解决办法
3102
查看次数

SAMLException:NameID 元素必须作为响应消息中主题的一部分出现,请在 IDP 配置中启用它

我正在使用spring-saml实现。在 WebSSOProfileConsumerImpl 类中,我可以找到以下几行代码,用于检查SAML 响应断言中的nameId 。

NameID nameID;
if (subject.getEncryptedID() != null) {
    Assert.notNull(context.getLocalDecrypter(), "Can't decrypt NameID, no decrypter is set in the context");
    nameID = (NameID) context.getLocalDecrypter().decrypt(subject.getEncryptedID());
} else {
    nameID = subject.getNameID();
}
Run Code Online (Sandbox Code Playgroud)

根据代码,很明显 nameId 应该是主题的一部分。但是大多数 IDP 包括我使用的那个都提到 nameId 可能是subject/attribute 的一部分。似乎有一些实现像SimpleSAMLPHP一样接受主题中的nameId

我收到的主题如下,没有包含 nameId

<saml2:Subject>
  <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">  
    <saml2:SubjectConfirmationData Address="91.X.X.X" InResponseTo="XXXX" NotOnOrAfter="2014-10-10T10:34:26.619Z" Recipient="http://localhost:8080/XXXX/saml/SSO"/>
  </saml2:SubjectConfirmation>
</saml2:Subject>
Run Code Online (Sandbox Code Playgroud)

但是,有一个属性nameId作为其属性值。为什么不能用这个代替主题中的那个。

<saml2:Attribute FriendlyName="testID" Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
  <saml2:AttributeValue> …
Run Code Online (Sandbox Code Playgroud)

spring spring-security assertion saml-2.0 spring-saml

5
推荐指数
1
解决办法
3718
查看次数