首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用WS-Security并从ASMX Web服务访问UsernameToken?

如何使用WS-Security并从ASMX Web服务访问UsernameToken?
EN

Stack Overflow用户
提问于 2009-12-09 00:46:04
回答 1查看 11.2K关注 0票数 4

好的,我们有一个遗留的ASMX web服务,它目前运行在.NET 3.5中,我们使用的是Visual Studio2008。

问题是,我们需要添加身份验证,并且希望在不破坏当前不需要身份验证的任何现有内部客户端的情况下利用WS-Security模型。

我们考虑过添加自定义头,但这并不是很符合WS-Security的要求。此外,升级到WCF,虽然是一个长期目标,但在短期内是不可行的。

有没有办法在VS2008 ASMX web服务的soap头中间接访问UsernameToken (假设它是由客户端传递的)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-09 00:59:24

你可以试试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实现不是100%向前兼容的。您将需要做一些您自己与WCF的兼容性测试,以确保。

示例

在客户端上指定凭据:

代码语言:javascript
复制
void SetUsernameCredential(WebServicesClientProtocol service, string userName, string password) {
    UsernameToken token = new UsernameToken(userName, password, PasswordOption.SendHashed);
    service.SetClientCredential(token);
}

正在服务器上验证凭据:

代码语言:javascript
复制
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;
    }
}

正在读取服务器上的凭据:

代码语言:javascript
复制
IPrincipal principal = RequestSoapContext.Current.IdentityToken.Principal;
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1868246

复制
相关文章

相似问题

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