【发布时间】:2013-04-05 17:06:27
【问题描述】:
我们目前有一个 WCF SOAP API,它允许消费者使用用户名和密码进行身份验证(内部使用 UserNamePasswordValidator)作为参考,用户名和密码在 SOAP 正文中传递如下:
<o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" mustUnderstand="1">
<Timestamp Id="_0">
<Created>
2013-04-05T16:35:07.341Z</Created>
<Expires>2013-04-05T16:40:07.341Z</Expires>
</Timestamp>
<o:UsernameToken Id="uuid-ac5ffd20-8137-4524-8ea9-3f4f55c0274c-12">
<o:Username>someusername</o:Username>
<o:Password o:Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">somepassword
</o:Password>
</o:UsernameToken>
</o:Security>
我们希望另外支持消费者在HTTP Authorization header 中指定凭据,作为基本身份验证或OAuth Bearer token
我们已经有几种方法可以实际对非 SOAP API 进行身份验证,但我不熟悉如何告诉 WCF 使用我可能为此创建的任何类。我怎样才能做到这一点?我看到的唯一一个试图回答这个问题的问题是here,但接受的答案使用的是 SOAP 标头,而不是 HTTP 标头,并且提问者基本上放弃了。
显然,任何解决方案都需要向后兼容 - 我们需要继续支持消费者在 SOAP 安全标头中指定凭据。
【问题讨论】:
-
@Vedran 那是如何向客户端添加标头,我需要在服务器上解析它们。
-
@PhilCarson 我已经尝试了一些方法,但是如果我尝试包含 UserNamePasswordValidator,如果没有 SOAP 安全标头,则请求失败 - 如果使用 OAuth 我不能让它只使用授权管理器。
-
当我手动解析 Security 标头时,我现在得到了一个 MustUnderstandSoapException(我一开始不想这样做)
标签: c# wcf authentication soap header