您可以尝试Web Services Enhancements (WSE) 3.0。这增加了对旧版本 WS-Security 的支持(我认为是 2004 版本 - WCF 支持 2005 和 2007 版本)。它位于 ASMX 之上而不会干扰它,并且在 .NET 3.5 / WS2008 中仍然可以工作。
现在来看看缺点:
- VS2008 不支持在客户端代码中添加或更新启用 WSE 的 Web 引用。它将愉快地创建正常的 ASMX 代理类,但不会创建身份验证所需的额外 WSE 代理类。您拥有的任何现有 WSE 代理代码都可以编译,但如果您尝试在 IDE 中更新 Web 引用,则会将其删除。如果您拥有 VS2005 的副本,则可以使用它来维护或至少在客户端创建 Web 引用。
- AFAIK,WS-Security 的 WSE 实现与 WCF 实现不是 100% 向前兼容。您将需要使用 WCF 进行一些自己的兼容性测试以确保。
例子
在客户端上指定凭据:
void SetUsernameCredential(WebServicesClientProtocol service, string userName, string password) {
UsernameToken token = new UsernameToken(userName, password, PasswordOption.SendHashed);
service.SetClientCredential(token);
}
在服务器上验证凭据:
public class MyUsernameTokenManager : UsernameTokenManager {
protected override string AuthenticateToken(UsernameToken token) {
// Authenticate here.
// If succeess, return an authenticated IPrincipal and the user's password as shown.
// If failure, throw an exception of your choosing.
token.Principal = principal;
return password;
}
}
在服务器上读取凭据:
IPrincipal principal = RequestSoapContext.Current.IdentityToken.Principal;