在 wcf 中添加用于安全身份验证的自定义标头

Posted

技术标签:

【中文标题】在 wcf 中添加用于安全身份验证的自定义标头【英文标题】:add custom header for security authentication in wcf 【发布时间】:2011-12-03 18:56:55 【问题描述】:

我正在使用 webHttpBinding 来公开 wcf 服务并返回 JSON 格式,我想在标头中进行一些安全认证,例如:

CustomerServiceClient client = new CustomerServiceClient();

            using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
            
                MessageHeader header = MessageHeader.CreateHeader("username", "http://tempuri.org", "testuser");

                OperationContext.Current.OutgoingMessageHeaders.Add(header);

            

但我收到此错误消息: 信封版本“EnvelopeNone (http://schemas.microsoft.com/ws/2005/05/envelope/none)”不支持添加邮件标头。

我google了很长时间,但没有结果。

谢谢。

【问题讨论】:

【参考方案1】:

根据 MessageHeader 类的 MSDN 文档的第一行,我相信 MessageHeader 旨在用于 SOAP 标头和 SOAP 服务:

http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.messageheader.aspx

由于您使用的是 webHttpBinding,我猜您是在创建 REST 服务而不是 SOAP 服务。在这种情况下,您应该使用 System.Net.WebClient 类:

http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx

或类似的,并使用其 Headers 属性设置标题。需要明确的是,这将设置 HTTP 标头,而不是 SOAP 消息标头,因为您没有使用 SOAP。

如果您真的想在示例代码中设置用户名(我猜是密码),那么您可以使用 WebClient 的 Credentials 属性,而不是使用 Headers 属性设置授权标头。

【讨论】:

以上是关于在 wcf 中添加用于安全身份验证的自定义标头的主要内容,如果未能解决你的问题,请参考以下文章

WCF 身份验证错误

通过身份验证标头 API WCF Soap C# .Net

如何在 wcf 中添加自定义肥皂标题?

带有客户端证书身份验证的 Wcf 不适用于 soapui

ASP.NET MVC 和 WCF 服务安全 - 身份验证、路由

Web API 安全和身份验证 - 不记名令牌