c# - 来自 CreateChannelWithIssuedToken 的 WCF channel 仍在发送 'requestsecuritytoken' 请求

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

使用 .Net 4.5 并使用 WIF 身份类生成 SAML2 token 并尝试将其添加到 soap 正文请求中,但它被忽略并且生成的 soap 请求实际上具有将发送到服务器的“requestsecuritytoken”soap 请求。我没有任何 STS。

此处引用代码'Need signature after SAML token in client request ' 似乎有效。

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

        <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 断言,现在尝试将该 token 与 soap 请求一起传递给 java 服务。

我是 .net/WCF/WIF 世界的新手,能否分享我遗漏或做错的事情?

谢谢

最佳答案

经过更多研究后,发现 WCF 基础结构在 WCF 客户端具有“自定义绑定(bind)”时首先在后台生成 RST(requestsecuritytoken)请求,但尚未发现我们是否可以更改该行为。因此,改为使用带有签名选项的“basicHTTPBinding”(客户端界面上的保护级别设置为签名),它现在正在对 soap 主体进行签名并放置时间戳。
现在对于 SAML2 token 插入使用拦截器并在从 WIF 类生成它之后添加它并发送最终的 soap 请求,该请求具有 SAML 断言签名、时间戳和 soap 主体签名。该请求在 Spring WS 端通过安全操作进行处理,并调用业务逻辑。这仅用于开发和测试。我想对于生产,我们仍然需要一个 STS。

关于c# - 来自 CreateChannelWithIssuedToken 的 WCF channel 仍在发送 'requestsecuritytoken' 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36748762/

相关文章:

c# - 判断修改键是否被按下

wcf - 使用消息安全性时的 WS-Security 开销

WIFI:可以在没有事件目录的情况下使用吗?

c# - 使用 IObserver/IObservable 实现观察者和主题

c# - 错误回发 ASP.NET MVC 的模型列表

c# - 在 ASMX Web 服务中使用 Server.Execute() 呈现 UserControl 的问题

wcf - 在 Windows Server 2008(64 位)上浏览 wcf 服务时出现 HTTP 错误 404.3 - 未找到

java - 将复杂参数从 ksoap Android 传递到 WCF Web 服务

asp.net-core - 在 web.config 中未检测到 system.identityModel

iphone - WIF 是保护 iPhone 的 WCF 4.0 Restful 服务的好选择吗