.NET WCF 使用 WS-Security 调用 .asmx

Posted

技术标签:

【中文标题】.NET WCF 使用 WS-Security 调用 .asmx【英文标题】:.NET WCF calling .asmx with WS-Security 【发布时间】:2009-10-27 15:42:57 【问题描述】:

.NET WCF 客户端程序能否调用使用 WS-Security 进行登录的现有(供应商提供的).asmx Web 服务?

在我们的例子中,供应商提供了一个带有 WS-Security 的 .asmx Web 服务。我们将首先尝试使用 SOAPUI 和 WCFTestHarness 或 WCFTestClient 来访问它。如果可能,宁愿使用 WCF。

谢谢,

尼尔·沃尔特斯

【问题讨论】:

【参考方案1】:

是的,当然。 WCF 对 WS-Security 有很好的支持。服务需要什么样的令牌进行身份验证?

假设它只是用户名/密码,您只需将绑定配置为使用 TransportWithMessageCredential 安全性,其中客户端凭据类型为 UserName(注意:您必须使用 HTTPS 来执行此操作)。首先,像这样定义一个绑定:

<basicHttpBinding>
    <binding name=“MyBinding”>
        <security mode=“TransportWithMessageCredential”>
            <transport clientCredentialType=“None” />
            <message clientCredentialType=“UserName” />
        </security>
    </binding>
</basicHttpBinding>

然后配置您的端点以使用此绑定:

<endpoint address="https://somewhere.com/TargetService.asmx" binding="basicHttpBinding" bindingConfiguration="MyBinding" />

然后在运行时,假设您使用的是生成的代理(即 ClientBase),您只需像这样设置客户端凭据:

TargetServiceClient client = new TargetServiceClient();
client.Credentials.UserName.UserName = "myusername";
client.Credentials.UserName.Password = "mypassword";

【讨论】:

WCF 支持几乎所有可以想象的 WS-* 标准 :-) @marc_s 如果没有,您可以自己添加。我喜欢我一些 WCF。 :)

以上是关于.NET WCF 使用 WS-Security 调用 .asmx的主要内容,如果未能解决你的问题,请参考以下文章

WCF 客户端 - 指定 WS-Security Timestamp 签名的签名算法

WCF 客户端使用 WS-Security UsernameToken PasswordDigest 身份验证方案使用 Axis 2 Web 服务时出错

SSL/TLS原理详解与WCF中的WS-Security

WCF客户端 - EncryptedKey子句未包含所需的加密令牌

更改 WCF 服务以与 .NET Framework 和 .NET Core 调用者兼容

在 WCF 中获取调用者的主机名