如何使用用户名/密码+ SSL与WCF配置安全RESTful服务(How to configure

2019-07-17 19:42发布

我期待写一个配置文件,允许在WCF REST风格的服务,但我还是想“进军”的成员提供的用户名/密码认证的能力。

下面是使用basicHttp结合或wsHttp瓦特/ WS安全我目前配置的一部分,这将如何改变瓦特/基于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>

Answer 1:

这里有与ASP.net成员资格提供保障WCF REST服务播客:

http://channel9.msdn.com/posts/rojacobs/endpointtv-Securing-RESTful-services-with-ASPNET-Membership/



Answer 2:

我达雷尔同意在WCF复杂REST场景是一个坏主意。 它只是不漂亮。

然而,多米尼克拜尔有一些好的帖子这个对他最小特权博客。

如果你想看到的WSSE身份验证支持回退到上的FormsAuthenticationTicket WCF的支持,请查看BlogService的源代码 。



Answer 3:

Before you continue down this path of fighting to implement REST over WCF, I suggest you read this post by Tim Ewald. I was especially impacted by the following statement:

I'm not sure I want to build on a layer designed to factor HTTP in on top of a layer that was designed to factor it out.

I've spent the last 12 months developing REST based stuff with WCF and that statement has proven itself to be so true over and over again. IMHO what WCF brings to the table is outweighed by the complexity it introduces for doing REST work.



Answer 4:

不管社会上有反对对WCF REST(我个人的围栏)意见微软已经在它采取了刷卡, http://msdn.microsoft.com/en-us/netframework/cc950529.aspx



Answer 5:

是用摩托同意,关闭WCF入门工具包的链接是我看到了使用自定义HTTP标头(证书的认证是最接近http://msdn.microsoft.com/en-us/library/dd203052.aspx )。

但是我不能让例子去。



Answer 6:

尝试custombasicauth @ CodePlex上



Answer 7:

UPDATE 01/23/2012

自从我写了这个问题,我已经看到了在野外确保REST像web服务的更好的方法。 这听起来复杂,当我第一次听说,但这个想法很简单,在整个网络上两个Web服务和其他安全通信。

它需要使用公钥/私钥的。

1)端点的每个用户(客户)将需要与您的REST Web服务注册

  • 一。)你给这个用户不应与任何人共享的私有密钥
  • 湾)也产生可以去通过线路以纯文本的公钥如果需要的话(这也将被用来识别客户端)

2。)从用户的每个请求需要以生成散列签署请求

  • A)这方面的一个例子可能看起来像:私钥+时间戳+编码的有效载荷(如果足够小的像一个简单的用户信息,例如要更新)
  • 湾)你把这些3(或任何你决定),并产生一个1个单向散列(使用HMAC例如)
  • 角)在请求被通过网络发送您包括公钥(所以服务器端知道是谁在试图发送该请求),这是产生瓦特/私钥对哈希和时间戳。

3)服务器端点(你REST方法),就需要使用生成的客户端上使用相同的输入哈希值。 这一步将证明,客户端和服务器知道匹配与请求一起传递的公钥的私钥。 (这反过来又意味着,用户发送的请求是合法的,因为没有人能知道的私有密钥)

  • 一)在请求期间查找一起被通过了公钥私钥的客户

  • 湾)带您在上一步中找到与私钥沿着另一PARAMS(时间戳和编码的有效载荷),并使用相同的算法生成一个1个单向散列(HMAC再次什么是我在现实世界中见过使用)

  • 角)将所产生的单向散列需要匹配发送过来的电线散列,如果不回送一个400(或任何HTTP代码,你认为是一个“错误的请求”)


文章来源: How to configure secure RESTful services with WCF using username/password + SSL