4

我正在尝试将此 WSE3.0 代码转换为 WCF:

// we use Microsoft WSE 3.0 to insert the username token in the soap header.
// This strategy takes care of creating and inserting the Nonce and Created elements 
// for us, as well as creating a password digest based on Nonce, Created, and 
// the password itself.  Refer to the WS-Secutiry UsernameToken Profile 1.1
// specification at http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wss.

Microsoft.Web.Services3.Security.Tokens.UsernameToken nametoken;
nametoken = new Microsoft.Web.Services3.Security.Tokens.UsernameToken(username, password, Microsoft.Web.Services3.Security.Tokens.PasswordOption.SendHashed);
Microsoft.Web.Services3.Design.Policy ClientPolicy = new Microsoft.Web.Services3.Design.Policy();

ClientPolicy.Assertions.Add(new UsernameOverTransportAssertion());
this._proxy.SetPolicy(ClientPolicy);
this._proxy.SetClientCredential<UsernameToken>(nametoken);

Microsoft.Web.Services3.Security.Tokens.PasswordOption.SendHashed除了以摘要模式发送密码(在上面的代码中)之外,我已经非常接近了:

TransportSecurityBindingElement transportBindingElement =
    SecurityBindingElement.CreateUserNameOverTransportBindingElement();
transportBindingElement.AllowInsecureTransport = true;
transportBindingElement.EnableUnsecuredResponse = true;
transportBindingElement.IncludeTimestamp = true;
var binding = new CustomBinding(new BindingElement[] { //
    transportBindingElement, //
    new TextMessageEncodingBindingElement() {
        MessageVersion = MessageVersion.Soap11
    }, //
    new HttpTransportBindingElement() {
        AuthenticationScheme = AuthenticationSchemes.Digest,
    }, //
});

上面仍然以纯文本(未散列)发送密码。我发现这个链接指向试图转换类似代码的人,有人说如果不编写自定义令牌序列化程序就无法设置 WCF 来执行此操作。

这个说法准确吗?

如果是,我需要做什么来创建和使用这个自定义序列化程序?

看起来这个链接可能是一个很好的起点,当与评论中链接的站点中的 PDF 结合时,给出以下公式Password_Digest = Base64 ( SHA-1 ( nonce + created + password ) ),但如果有人对我需要从中获得什么以及如何让 WCF 使用有更好的解释我很想听听我的新序列化程序。

4

1 回答 1

5

你找到了我的问题:)

这是一个非常有趣的问题。MS 经常被指责为他们产生了不安全的系统和 API,因此 MS 的一些工程师开始将一些关于什么是安全的和什么不是新的 API 的想法结合起来。带有摘要密码的 UserNameToken 配置文件正是这项工作的结果。它被认为不够安全,因此在 WCF 中完全省略了它。好吧,如果 WCF 不是用于与其他平台和框架互操作的 API,其中带有摘要密码的 UserNameToken 配置文件非常流行,那应该不是问题。

是的,当我们解决问题时,我们做了自定义令牌序列化程序。它不仅与令牌序列化程序有关。实际上,您必须实现很多类才能使其工作。我不会分享我们的实现,因为它不是我的代码,但你可以试试这个

于 2011-08-05T18:46:08.877 回答