使用 WCF 创建需要身份验证并使用 JSON 作为输入/输出格式的 RESTful Web 服务

Posted

技术标签:

【中文标题】使用 WCF 创建需要身份验证并使用 JSON 作为输入/输出格式的 RESTful Web 服务【英文标题】:Using WCF to create a RESTful Web Service that requires authentication and uses JSON as input/output format 【发布时间】:2011-08-25 03:26:09 【问题描述】:

我想将现有的 ASP.NET Web 服务移植到 WCF,因此生成的 Web 服务 (1) 是 RESTful,(2) 使用 JSON 作为其请求/响应格式,(3) 具有自定义身份验证机制。

经过大量的谷歌搜索、随机编码,并想把头撞到墙上,我发现......

    必须使用webHttpBinding 来使 Web 服务成为 RESTful。但是……

      webHttpBinding 不支持 HTTPS 主机。

      webHttpBinding 不支持用户名身份验证。

      webHttpBinding 甚至不支持消息安全。

    必须使用带有<enableWebScript/> 的端点行为来支持 ASP.NET AJAX。但是……

      什么是“ASP.NET”AJAX?

      如果我想使用“常规”AJAX 使用 Web 服务怎么办?

而且,最重要的是……

    WCF 可以做我想做的事情吗?

    如果没有,我还可以使用哪些其他平台?

【问题讨论】:

【参考方案1】:

我已经编写了 WCF 服务,它使用 XML 和 JSON 以及自定义身份验证来执行 SOAP 和 REST。我已经将自定义身份验证推送到 HTTP 模块中,该模块通过 https 进行基本身份验证。见Custom HTTP Basic Authentication for ASP.NET Web Services on .NET 3.5/VS 2008 和WCF POX, JSON and SOAP Coexist。

【讨论】:

如何编写 HTTP 模块?我是一个非常新手的 Web 开发人员。 @Eduardo León 当我谷歌“http 模块”时,它出现的第一页是示例代码。如果信息很容易获得,作为新手不能作为借口。您是否也关注了我提供的链接?【参考方案2】:

在您描述的设置中,网络服务器(即 IIS)将负责加密(HTTPS)和身份验证(例如基本身份验证)。 IIS 可以使用自定义身份验证机制进行扩展(只需 google 搜索“IIS 模块处理程序”)。

有点奇怪,它必须委托给 IIS,而不是 WCF 的一部分。但是完全没有问题。

【讨论】:

"网络服务器将负责加密..." 怎么样?我尝试使用带有webHttpBinding 的HTTPS 主机,但出现错误。 抱歉,我本可以更清楚地说明:在此设置中,您必须在 IIS 中配置它(使用 IIS 管理器/inetmgr.exe),而不是在 web.config 的 WCF 部分(或您使用的任何 WCF 配置)。 有什么方法可以让 IIS 使用我的自定义 UserNamePasswordValidator 假设您的自定义 UserNamePasswordValidator 用于身份验证,我建议您查看custombasicauth.codeplex.com,了解如何实现自定义身份验证并使其与 WCF 一起使用。您可以在网上找到更多示例。 我下载了,怎么安装呢?没有任何文档。

以上是关于使用 WCF 创建需要身份验证并使用 JSON 作为输入/输出格式的 RESTful Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

WCF 用户身份验证和授权

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

如何对 WCF 数据服务进行身份验证?

创建 WCF 休息服务以接受 SAML 并对 Windows 用户进行身份验证

使用 IIS7、WCF Rest、自定义身份验证模块进行模拟

如何对 WCF 4 RESTful 服务进行身份验证?