消费SAML断言

时间:2014-10-31 12:27:33

标签: web-services soap saml

我正在尝试使用需要身份验证的soap服务传递给他一个SAML断言,由于某些原因我手动完成(请不要开始建议“使用这个或那个库”,我需要了解理论上至少必须做些什么。

到目前为止,我做到了:

  • 向发行人询问SAML断言传递用户名和密码(所有工作,我收到SAML断言)
  • 准备了将使用http客户端发送的soap消息,消息正确并且排除了身份验证。
  • 我在soap消息中插入了收到的确切断言文本,我发送给WS的消息如下:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"   xmlns:wsa="http://www.w3.org/2005/08/addressing">
    <soapenv:Header>
       <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-    wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
          <saml:Assertion xmlns="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" AssertionID="..../ds:Signature></Assertion>  
       </wsse:Security>
    </soapenv:Header> 
<soapenv:Body>....

但结果是响应错误:

wsse:InvalidSecurity,缺少wsse:请求中的安全标头

为什么会这样?直接重用收到的“&lt; saml:Assertion”是错误的吗?我应该以某种方式处理并重新签名吗?

1 个答案:

答案 0 :(得分:0)

缺少名称空间参考!

安全块中缺少文本

 xmlns:xenc="http://www.w3.org/TR/xmlenc-core1/"

启用xenc块的断言