大家~!最近我建立了一个项目,使用spring security saml扩展作为SP,ADFS作为idp,并且由spring security saml扩展创建的AuthnRequest xml是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
    AssertionConsumerServiceURL="http://127.0.0.1:8080/sp" 
    ForceAuthn="false" ID="9135430817744047388" IsPassive="false" 
    IssueInstant="2016-11-17T06:20:05.912Z" 
    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
    Version="2.0"> 
    <samlp:Issuer xmlns:samlp="urn:oasis:names:tc:SAML:2.0:assertion"> 
        test 
    </samlp:Issuer> 
    <saml2p:NameIDPolicy 
        xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" AllowCreate="true"/> 
</samlp:AuthnRequest> 

当我将此 SAMLRequest 发送到 ADFS 服务器时,服务器响应一个类似“urn:oasis:names:tc:SAML:2.0:status:Responder”的错误,并且没有断言内容。为了测试,我使用 OpenSAML 编写了一些 java 代码来创建 AuthnRequest xml,然后更改了属性

ID="9135430817744047388"

ID="_9135430817744047388"

然后一切正常。看来ID中的字符_会影响结果。 所以我的问题是,如何更改 spring security saml 扩展中的 ID 属性以在 ID 前面添加 _

请您参考如下方法:

我犯了一个错误,字符_无关紧要,而是请求的符号类型,由于元数据生成器的属性requestSigned默认设置为true,spring saml会在http post请求中添加SigAlgSignature参数,然后adfs服务器将检查SP在IDP中注册的证书,而我不提供客户端向 IDP 颁发证书。 解决方案:将属性 requestSigned 设置为 false,这样 spring saml 就不会发送 SAMLRequest 的签名,一切正常。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!