Wcf 如何使用用户名/密码+;SSL
我希望编写一个配置文件,允许在WCF中使用RESTful服务,但我仍然希望能够“点击”成员资格提供者进行用户名/密码身份验证 下面是我当前使用basicHttp绑定或WSHTTPW/out WS-Security配置的一部分,这将如何更改基于REST的服务Wcf 如何使用用户名/密码+;SSL,wcf,web-services,security,rest,Wcf,Web Services,Security,Rest,我希望编写一个配置文件,允许在WCF中使用RESTful服务,但我仍然希望能够“点击”成员资格提供者进行用户名/密码身份验证 下面是我当前使用basicHttp绑定或WSHTTPW/out WS-Security配置的一部分,这将如何更改基于REST的服务 <bindings> <wsHttpBinding> <binding name="wsHttp"> <security
<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>
在你们继续为通过WCF实现REST而奋斗之前,我建议你们阅读Tim Ewald的文章。我尤其受到以下陈述的影响: 我不确定我是否想建立在 设计用于将HTTP考虑在内的层 设计用于 把它算出来
在过去的12个月里,我一直在用WCF开发基于REST的东西,这句话一次又一次地被证明是正确的。我认为WCF带来的好处被它为REST工作引入的复杂性所抵消。我同意Darrel的观点,WCF上复杂的REST场景是个坏主意。只是不太好看 然而,多米尼克·拜尔(Dominick Baier)在其最不受欢迎的博客上对此有所了解
如果您想在WCF上看到WSSE身份验证支持和回退到FormsAuthenticationTicket支持,请查看。这里是一个关于使用ASP.net成员资格提供程序保护WCF REST服务的播客:
无论社区是否对WCF上的REST有意见(我个人持反对意见),微软已经对其进行了抨击,是的,Moto同意,WCF初学者工具包的链接是我所看到的最接近使用自定义HTTP头进行凭证认证的内容()
然而,我无法让这个例子继续下去。试试看更新01/23/2012 自从我写了这个问题以来,我看到了一种更好的方法来保护REST,就像在野外保护web服务一样。当我第一次听说它的时候,它听起来很复杂,但是它的想法很简单,而且在整个web上都适用于web服务和其他安全通信 它需要使用公钥/私钥 1.)端点的每个用户(客户)都需要向REST web服务注册
- a、 )您为该用户提供了一个不应与共享的私钥 任何人
- b、 )您还可以生成一个可以通过网络传输的公钥 如果需要,以纯文本显示(这也将用于识别客户)
- a、 )这方面的一个例子可能是:私钥+时间戳+编码的有效负载(例如,如果足够小,像一个简单的用户信息需要更新)
- b、 )取这3个(或您决定的任何内容)并生成一个单向散列(例如使用hmac)
- c、 )在通过网络发送的请求中,包括公钥(以便服务器端知道谁在试图发送此请求)、生成的哈希值(包含私钥)和时间戳
- a、 )通过请求期间传递的公钥查找客户私钥
- b、 )将其他参数(时间戳和编码的有效负载)与上一步中找到的私钥一起使用,并使用相同的算法生成单向散列(同样,hmac是我在现实世界中看到的)
- c、 )生成的单向散列需要与通过线路发送的散列相匹配,如果不发送回400(或任何您认为是“错误请求”的http代码)