首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用.net webservices或wcf创建安全SOAP主体?

如何使用.net webservices或wcf创建安全SOAP主体?
EN

Stack Overflow用户
提问于 2016-01-15 03:10:02
回答 1查看 955关注 0票数 3

目前,我正在使用.NEt的Java服务。这里我使用WSE3.0来使用Java安全web服务。但我发现了一个错误:

“引发的异常:无法检索引用的安全令牌”

在比较了java请求和.NET SOAP Request.here之后,我发现我发送的是正确的.net SOAP头,但是正文发送的是错误的。有谁能帮助我如何发送来自.net客户端的安全身体请求?

下面,我给出了Java和.Net SOAP数据:

.Net请求XML SOAP主体(现在我正在发送)

代码语言:javascript
复制
<soap:Body wsu:Id="Id-165fc268-5917-43b9-aed2-091fb948c508">
          <xenc:EncryptedData Id="Enc-20dbd181-a655-4843-882a-b8b36b9d028d" Type="http://www.w3.org/2001/04/xmlenc#Content" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
            <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
            <xenc:CipherData>
              <xenc:CipherValue>UO32nmFhQZ4JBNuWk6xTz20FpjfPWQqr1F5zqOf7uQ6hBJzfndGAJvb/l/MgT0x7P2ZTiEeNj51ZDYKDZrQ1Ax3SCJyzacX6suemUVWmMaVGtJ8DJPqka7T3xDkWpgVlDmc1am1B+E7SXdfd9RIINv+JpYhF5Fx4m3ZaeYvPQLVrvF3Rpvya2L1mC/LeHVYwM/ep6x5f9tQnz50UASBHIA==</xenc:CipherValue>
            </xenc:CipherData>
          </xenc:EncryptedData>
        </soap:Body>

JAVA请求XML (预期来自java服务器)

代码语言:javascript
复制
      <soap:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="id-2">
<xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="ED-5" Type="http://www.w3.org/2001/04/xmlenc#Content">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

<wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsse11="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd" wsse11:TokenType="http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#EncryptedKey">
<wsse:Reference URI="#EK-7FBF3DBE856BC8B2BC14527661038314"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>SQ0nnx45EPDL5uoFRzeTjJy6+FhaCZTK/3LRz5DrPM4qAQ2JzARNiLmuj61YSHd6nOMVy1QmPCqH5gG6PIIN8x47r10fzOkuisxpcOaUdnFL3bY55AvfyL6fUbSfcp+fl3qw6SAB3QF0AR1thqpfKBttBv8b7GxbpApCZg6TWaw8nD7G7dVmtdpDBJN7uQSQJu5ibdBGLzbVoF9YtliYH1mbdswL4KVJtZKUl2UAQqDtbxgXAkKtNwNyq4pt7N+HVhX00mZMxiTE0IyRyfgQhwp6afsTvsGVmdKxcpWtRoOFmmIHhrTeXJal/jJAI84mmg5EV44TJezFFbEyqsL+vhhR/N6oITaa
</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
</soap:Body>

您知道我如何从.Net web服务或WCF向服务器发送与Java相同的请求吗?

EN

回答 1

Stack Overflow用户

发布于 2016-01-18 02:38:48

您必须这样做才能将X.509集成到您的web服务客户端。

代码语言:javascript
复制
       public void MyWebServiceClient()
       {
            using (var client = new MyWebService())
            {
                try
                {
                    //calls the web service
                    client.Url = //Your server EndpointUri;

                    //assign cert
                    ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
                    string certificatePath = //certificate path
                    string certificatePassword = //certificate password
                    X509Certificate2 cert = new X509Certificate2(certificatePath, certificatePassword, X509KeyStorageFlags.MachineKeySet);
                    client.ClientCertificates.Add(cert);

                    //var result = client.WebServiceCall(your input);
                }
                catch (Exception ex)
                {
                    throw new Exception("Error " + ex.Message);
                }
            }
        }


    public bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
    {            
        // accept all certificates
        return true;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34803774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档