我正在寻找一个允许在WCF中使用RESTful服务的配置文件,但我仍然希望能够“利用”成员资格提供程序进行用户名/密码身份验证。
以下是使用basicHttp绑定或wsHttp w / out WS Security的当前配置的一部分,这将如何改变基于REST的服务?
<bindings>
<wsHttpBinding>
<binding name="wsHttp">
<security mode="TransportWithMessageCredential">
<transport/>
<message clientCredentialType="UserName" negotiateServiceCredential="false" establishSecurityContext="false"/>
</security>
</binding>
</wsHttpBinding>
<basicHttpBinding>
<binding name="basicHttp">
<security mode="TransportWithMessageCredential">
<transport/>
<message clientCredentialType="UserName"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="NorthwindBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceAuthorization principalPermissionMode="UseAspNetRoles"/>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
答案 0 :(得分:3)
以下是使用ASP.net会员提供商保护WCF REST服务的播客:
http://channel9.msdn.com/posts/rojacobs/endpointtv-Securing-RESTful-services-with-ASPNET-Membership/
答案 1 :(得分:2)
我同意Darrel的观点,即基于WCF的复杂REST场景是一个坏主意。它只是不漂亮。
然而,Dominick Baier在他的最小特权博客上有一些good posts。
如果您希望通过回退到WCF上的FormsAuthenticationTicket支持来查看WSSE身份验证支持,请查看source code of BlogService。
答案 2 :(得分:1)
在继续沿着WCF实施REST的战斗之前,我建议你阅读Tim Ewald撰写的this帖子。我特别受到以下声明的影响:
我不确定我想建立一个 设计用于在HTTP中使用HTTP的层 设计为的图层的顶部 将它排除在外。
在过去的12个月里,我一直在使用WCF开发基于REST的东西,而且这种说法已经证明了自己一遍又一遍如此真实。恕我直言,WCF为表格所带来的复杂性远远超过了它为REST工作所引入的复杂性。
答案 3 :(得分:1)
无论社区是否对WCF 上的REST提出意见(我个人都在围栏中) Microsoft已经对其进行了轻视, http://msdn.microsoft.com/en-us/netframework/cc950529.aspx < / p>
答案 4 :(得分:1)
是的,与Moto达成一致,WCF Starter Kit中的链接是我使用自定义HTTP标头(http://msdn.microsoft.com/en-us/library/dd203052.aspx)验证身份验证时最接近的事情。
但是我无法得到这个例子。
答案 5 :(得分:1)
答案 6 :(得分:1)
更新01/23/2012
自从我写这个问题以来,我已经看到了一种更好的方法来保护REST,就像野外的Web服务一样。当我第一次听到它时听起来很复杂,但这个想法很简单,而且整个网络都提供Web服务和其他安全通信。
它需要使用公钥/私钥。
1。)端点的每个用户(客户)都需要注册您的REST Web服务
2.)来自用户的每个请求都需要生成一个哈希来签署请求
3.)服务器端点(您的REST方法)将需要使用客户端上使用的相同输入生成哈希。此步骤将证明客户端和服务器都知道与传递请求一起传递的公钥匹配的私钥。 (这反过来意味着发送请求的用户是合法的,因为没有其他人可以知道私钥)
a。)通过在请求期间传递的公钥查找客户私钥
b。)获取其他参数(时间戳和编码的有效负载)以及您在上一步中找到的私钥,并使用相同的算法生成1路哈希(再次hmac是我的看到在现实世界中使用过)