【问题标题】:Spring Security SAML Extension, SAML Assertion Mangled, Signature LostSpring Security SAML 扩展、SAML 断言损坏、签名丢失
【发布时间】:2018-03-16 23:13:27
【问题描述】:

我正在使用以下 Spring Security 1.0.2.RELEASE 示例代码从 JSP 中的 Spring 获取我的 SAML 断言(下面的最后一个代码示例)。我正在尝试像在 SAMPLE 应用程序中那样做。我可以看到我的 sp.xml 和 idp.xml 与 PingIdentity 一起正常工作,这在日志中显示了格式良好的 SAML 断言(请参阅下面的 Ping 日志断言)。但是当我查看下面的“token”变量时(参见下面的 Spring 代码示例),签名值和摘要值都丢失了。 ...标签仍然存在,否则看起来像是 OK SAML2 断言... ...但是即使 ping 实际上确实提供了这些值,也缺少一些基本值,例如签名。奇怪,ID 匹配,也没有包括在下面,从 Ping 到 Spring 的很多角色都正确显示在 SAML 断言“令牌”变量中......

来自 ping:

    2017-10-05 12:43:58,119 tid:fv0iEyiXUF5yhlB_-cZnExX0YTc DEBUG [org.sourceid.saml20.bindings.LoggingInterceptor] Transported Response. OutMessageContext:
OutMessageContext
XML: <samlp:Response Version="2.0" ID="F5FQ26j6o6VT0zNdZ4r87pDw8NT" IssueInstant="2017-10-05T10:43:58.072Z" InResponseTo="a1786b4f3g394b812f9edd3ca26c80g" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">app1</saml:Issuer>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
  </samlp:Status>
  <saml:Assertion ID="VmzXJoyk.9mxifAuyt4.WWi3F1O" IssueInstant="2017-10-05T10:43:58.103Z" Version="2.0" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
    <saml:Issuer>app1</saml:Issuer>
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
      <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
        <ds:Reference URI="#VmzXJoyk.9mxifAuyt4.WWi3F1O">
          <ds:Transforms>
            <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
            <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
          </ds:Transforms>
          <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
          <ds:DigestValue>ZnT3MW5R1Nm9y/Pe8Br5m1BXXbXTc0VWeIIkUGyJaOI=</ds:DigestValue>
        </ds:Reference>
      </ds:SignedInfo>
      <ds:SignatureValue>bHPhuD09Q2az7TxBvJo2LavF2N5YaroZoCNZzG17iJmSVycv0Gfq3liSKb2yIPhY0I9WVr8WwM/N
dw720okdsEuIbzuy/NYOlOCB3sFaZ6GmmU0FruUHyqjTjGOxHA6504KpvVQjEg3D5iJeNTovKtQR
tICvKjT4Hv9qTE3tg1viWTnih3xFM++gPffHhfKwWHjXMJTpyy5oQaviYUlQw7Elgv0cyN9ni/jJ
lFWC0QJJYXK8BwDdyY4MOqvTz8F4DgBnkwAQ+TnPUwuCRDL0ckW84knrWAh4qz18bQzVjSBpT+AI
7i6NiQ/1L/YnoRvRJ3EttAKUTEO3YrtkJPxcxQ==</ds:SignatureValue>
    </ds:Signature>
    <saml:Subject>

来自spring(下面“token”的值):

   <?xml version="1.0" encoding="UTF-8"?>
<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="VmzXJoyk.9mxifAuyt4.WWi3F1O" IssueInstant="2017-10-05T10:43:58.103Z" Version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <saml:Issuer>app1</saml:Issuer>
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:SignedInfo>
            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
            <ds:Reference URI="#VmzXJoyk.9mxifAuyt4.WWi3F1O">
                <ds:Transforms>
                    <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
                        <ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="xs"/>
                    </ds:Transform>
                </ds:Transforms>
                <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                <ds:DigestValue/>
            </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue/>
    </ds:Signature>

弹簧安全码:

<%@ page import="org.springframework.security.saml.SAMLCredential"%>
<%@ page import="org.springframework.security.core.context.SecurityContextHolder"%>
<%@ page import="org.springframework.security.core.Authentication"%>
<%@ page import="org.opensaml.saml2.core.Attribute"%>
<%@ page import="org.springframework.security.saml.util.SAMLUtil"%>
<%@ page import="org.opensaml.xml.util.XMLHelper"%>
(...)
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    SAMLCredential credential = (SAMLCredential) authentication.getCredentials();
    (...)                                
    String token = XMLHelper.nodeToString(SAMLUtil.marshallMessage(credential.getAuthenticationAssertion())); 

【问题讨论】:

  • 仅供参考,参考 Spring Security SAML 应用程序摘录中的“凭据”变量,credential.getAuthenticationAssertion().getSignature() 返回一个带有签名算法的对象,但所有其他成员签名对象为空(keyInfo、keyLength 等...)。并且 xmlSignature 不可用,也许我正在为 openSAML 阅读的 API 与 Spring Security 中的版本不同......

标签: spring-security saml-2.0


【解决方案1】:

添加了这个并取回了我的签名。知道用户错误的你说什么?

<bean id="webSSOprofileConsumer" class="org.springframework.security.saml.websso.WebSSOProfileConsumerImpl">
  <property name="releaseDOM" value="false" />
</bean>

..添加到 Spring Security SAML 扩展文件“securityContext.xml”

【讨论】:

    猜你喜欢
    • 2015-08-27
    • 2015-07-30
    • 2020-05-31
    • 2015-01-21
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 2014-12-25
    • 2015-09-23
    相关资源
    最近更新 更多