使用 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 休息服务以接受 SAML 并对 Windows 用户进行身份验证