配置Spring Security SAML以使用SHA-256作为安全散列算法

Man*_* Ha 8 spring-security spring-saml

我正在开发Spring SAML和Microsoft ADFS 3.0之间的集成.即使它已经在Spring SAML的文档中说明如下:

通过双击打开提供程序,选择选项卡Advanced并将"Secure hash algorithm"更改为SHA-1

据我所知,Spring SAML目前只支持SHA-1作为哈希算法,但我的要求是使用SHA-256.如果我尝试仅在ADFS中配置SHA-256,则它不起作用.我想我必须对Spring SAML做点什么.你知道怎么做吗?

R. *_*olt 6

您应该将Spring安全性配置配置为使用SHA-256签名算法。

您可以覆盖SAMLBootstrap或进行如下配置initializing bean

弹簧配置

<bean id="samlProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:saml.properties" />
</bean>
<bean class="your.package.SAMLConfigurationBean">
    <property name="signatureAlgorithm" value="${saml.signatureAlgorithm:SHA1}" />
</bean>
Run Code Online (Sandbox Code Playgroud)

属性文件(saml.properties)

saml.signatureAlgorithm=SHA256
Run Code Online (Sandbox Code Playgroud)

初始化bean

package your.package;

import org.opensaml.Configuration;
import org.opensaml.xml.security.BasicSecurityConfiguration;
import org.opensaml.xml.signature.SignatureConstants;
import org.springframework.beans.factory.InitializingBean;

public class SAMLConfigurationBean implements InitializingBean {

    private String signatureAlgorithm ;
    private String digestAlgorithm;

    public void setSignatureAlgorithm(String algorithm) {
        switch (algorithm) {
            case "SHA256" :
                signatureAlgorithm = SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256;
                digestAlgorithm = SignatureConstants.ALGO_ID_DIGEST_SHA256;
                break;
            case "SHA512" :
                signatureAlgorithm = SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA512;
                digestAlgorithm = SignatureConstants.ALGO_ID_DIGEST_SHA512;
                break;
            default:
                signatureAlgorithm = SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1;
                digestAlgorithm = SignatureConstants.ALGO_ID_DIGEST_SHA1;
        }
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        BasicSecurityConfiguration config = (BasicSecurityConfiguration) Configuration.getGlobalSecurityConfiguration();
        config.registerSignatureAlgorithmURI("RSA", signatureAlgorithm);
        config.setSignatureReferenceDigestMethod(digestAlgorithm);
    }
}
Run Code Online (Sandbox Code Playgroud)

您也可以跳过可配置部分,并为此做好准备:

初始化bean

package your.package;

import org.opensaml.Configuration;
import org.opensaml.xml.security.BasicSecurityConfiguration;
import org.opensaml.xml.signature.SignatureConstants;
import org.springframework.beans.factory.InitializingBean;

public class SAMLConfigurationBean implements InitializingBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        BasicSecurityConfiguration config = (BasicSecurityConfiguration) Configuration.getGlobalSecurityConfiguration();
        config.registerSignatureAlgorithmURI("RSA", SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256);
        config.setSignatureReferenceDigestMethod(SignatureConstants.ALGO_ID_DIGEST_SHA256);
    }
}
Run Code Online (Sandbox Code Playgroud)