来自CreateChannelWithIssuedToken的WCF频道仍然发送' requestsecuritytoken'请求

时间:2016-04-20 15:39:10

标签: c# wcf wif saml-2.0 ws-trust

使用.Net 4.5并使用WIF身份类生成SAML2令牌,并尝试将其添加到soap body请求中,但忽略它并生成soap请求实际上有“requestsecuritytoken”'要进入服务器的soap请求。我没有任何STS。

此处的参考代码' Need signature after SAML token in client request'似乎工作。

我在app.config中的自定义绑定是

        <customBinding>
          <binding name="AccountDetailsServiceSoap11" >
            <textMessageEncoding messageVersion="Soap11WSAddressing10"/>
            <security includeTimestamp="true">
            </security>
            <httpTransport></httpTransport>
          </binding>
   </customBinding>

生成肥皂信封

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</a:Action><a:MessageID>urn:uuid:b7ff68ac-df62-4051-a68a-7382b0ec4995</a:MessageID><a:ReplyTo><a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address></a:ReplyTo><a:To s:mustUnderstand="1">http://localhost:8888/spring-webservices-sample/endpoints</a:To></s:Header><s:Body><t:RequestSecurityToken Context="uuid-f4007218-af5c-4f84-b800-0e47f102d3b5-1" xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust"><t:TokenType>http://schemas.xmlsoap.org/ws/2005/02/sc/sct</t:TokenType><t:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</t:RequestType><t:KeySize>256</t:KeySize><t:BinaryExchange ValueType="http://schemas.xmlsoap.org/ws/2005/02/trust/spnego" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">YHoGBisGAQUFAqBwMG6gMDAuBgorBgEEAYI3AgIKBgkqhkiC9xIBAgIGCSqGSIb3EgECAgYKKwYBBAGCNwICHqI6BDhOVExNU1NQAAEAAAC3shjiCQAJAC8AAAAHAAcAKAAAAAYBsR0AAAAPQUEzNzMwOUNJTkNPTVNZUw==</t:BinaryExchange></t:RequestSecurityToken></s:Body></s:Envelope>

我想使用来自.net客户端的java中的SAML来测试安全的Web服务。我在Visual Studio 2015中获得了从WSDL生成的服务客户端,然后从类生成了SAML断言,现在尝试将带有soap请求的令牌传递给java服务。

有些人可以分享我错过或做错的事,我是.net / WCF / WIF世界的新手?

感谢

1 个答案:

答案 0 :(得分:1)

在做了一些更多的研究之后,发现了WCF基础设施在进行自定义绑定时所做的事情。在WCF客户端首先在后台生成RST(requestsecuritytoken)请求,如果我们可以更改该行为,则还没有找到。所以改为使用&#39; basicHTTPBinding&#39;使用签名选项(客户端界面上的protectlevel设置为签名),现在正在签署soap body并将timestamnp放入。
现在为SAML2令牌插入使用拦截器并在从WIF类生成它之后添加它并发送最终的soap请求,其中SAML断言已签名,时间戳和soap body已签名。该请求在Spring WS端处理,并调用了安全操作和业务逻辑。这仅用于开发和测试。我想对于Production我们仍然需要一个STS。