我想写一个配置文件允许用于宁静的服务WCF,但我仍然希望能够进入'的成员资格提供用户名/密码认证。

下面是一部分,我目前的配置使用basicHttp结合或wsHttp w/出WS安全,这将如何改变w/其他基础服务?

    <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>
有帮助吗?

解决方案 7

更新01/23/2012

因为我写了这个问题,我已经看到一个更好的办法,以确保其余喜欢网服务在野外。这听起来复杂,当我第一次听说过但这个想法是简单和所有网站,用于两个网络服务和其他安全的通信。

它要求采用公众/私人钥匙。

1.) 每个用户(用户)的终点将需要登记你的休息网的服务

  • a.) 你给该用户的私人钥匙这不应该分享 任何人
  • b.) 你还生成的公钥可以去过丝 在普通的文本,如果需要的话(这也将被用来识别客户)

2.) 每个请求来自用户的需要产生一个哈签署的请求

  • a.) 这方面的一个例子可能如下:私人钥+时间戳+编码的有效载荷的(如果中小够像一个简单的用户信息,以更新,例如)
  • b.) 你把这3(或无论你决定)和产生1散的方式(使用hmac例如)
  • c.) 在请求正在通过网络发送你可包括公钥(所服务器侧知道谁是试图发送该请求)、哈希产生w/私密钥和时间戳。

3.) 服务器的端点(你的休息方法)将需要产生一散列使用同样投入使用。这一步骤将证明客户和服务器知道的私人钥匙相匹配的公共钥匙传递请求。(这又意味着用户发送的请求是合法的,因为没有人能知道的私人钥匙)

  • a.) 查找客户的私人钥匙通过公共密钥正在通过在请求

  • b.) 采取的其他参数(时间戳和编码的有效载荷)与私人钥匙你找到了在先前的步骤,并使用相同的算法以产生1向哈希(再次hmac是我所看到的用于现实世界)

  • c.) 将得到1向散列的需要相匹配的散列通过网络发送的,如果不送回的400(或任何http码你认为是一个"错误的请求")

其他提示

我同意Darrel的观点,即基于WCF的复杂REST场景是一个坏主意。它只是不漂亮。

然而,Dominick Baier在他的最小特权博客上有一些好帖子

如果您希望通过回退到WCF上的FormsAuthenticationTicket支持来查看WSSE身份验证支持,请查看 BlogService的源代码

在继续沿着WCF实施REST的战斗之前,我建议你阅读这篇帖子。我特别受到以下声明的影响:

  

我不确定我想建立一个   设计用于在HTTP中使用HTTP的层   设计为的图层的顶部   将它排除在外。

在过去的12个月里,我一直在使用WCF开发基于REST的东西,而且这种说法已经证明了自己一遍又一遍如此真实。恕我直言,WCF为表格所带来的复杂性远远超过了它为REST工作所引入的复杂性。

无论社区是否对WCF上的REST提出意见(我个人都在围栏中)微软已经对它进行了轻视, http://msdn.microsoft.com/en-us/netframework/cc950529.aspx

是的,与Moto达成一致,WCF Starter Kit的链接是我看到的最接近使用自定义HTTP标头验证凭据的内容( http://msdn.microsoft.com/en-us/library/dd203052.aspx )。

但是我无法得到这个例子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top