0

我已经能够为一个集成项目创建一个很好的 WCF 服务,它可以以纯 xml、json 和soap 形式返回结果。在我开始实施安全性之前,这非常有效。使用 WebHttpBindings 时,wcf 服务中内置的 ws 安全功能被绕过,该功能适用​​于:

<webHttp defaultOutgoingResponseFormat="Json"/>

[OperationContract()]
[WebGet(UriTemplate = "GetSomething/{someID}/{anotherID}?somethingElse={somethingElse}")]
SomeResponse GetSomething(string someID,string anotherID, DateTime somethingElse)

我喜欢玩我的第一个 restful api,但是我需要完成一个项目,并且要求包含一个安全的身份验证策略。我不需要将结果作为 json 返回,也不一定是休息服务,但这激起了我的好奇心。

...有关身份验证策略/WCF REST 服务的任何好主意?

4

2 回答 2

0

您可能需要 clientCredentialType="Certificate" 或 "Windows"

<webHttpBinding>
  <binding name ="RestSSL">
    <security mode ="Transport">
      <transport clientCredentialType= "Windows" />
    </security>
  </binding>                
</webHttpBinding>

如果您使用证书,您还需要将 serviceBehavior 的 certificateValidationMode 设置为 PeerTrust、ChainTrust 等。http://msdn.microsoft.com/en-us/library/system.servicemodel.security.x509certificatevalidationmode.aspx

<behaviors>
  <serviceBehaviors>
    <behavior>
      <dataContractSerializer maxItemsInObjectGraph="1048576"/>
      <serviceMetadata httpGetEnabled="False" httpsGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False"/>
      <serviceCredentials>
        <!-- Please note: the app pool will need an identity with access to this cert-->
        <serviceCertificate findValue="myCertSubject.myDomain.com"
                            storeLocation="LocalMachine"
                            storeName="My"
                            x509FindType="FindBySubjectName"/>
        <clientCertificate>
          <authentication certificateValidationMode="PeerTrust"/>
        </clientCertificate>
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
于 2012-07-28T03:58:40.520 回答
0

通常,大多数人在保护宁静的 wcf 服务时倾向于使用 OAuth。OAuth 是一种开放协议,允许通过桌面和 Web 应用程序以简单和标准的方法进行安全 API 身份验证。它允许客户端提供一个消费者密钥,用于标识必须为每个服务调用发送的客户端。该信息作为 HTTP 授权标头的一部分发送。从这里下载 OAuth 类

有关实现细节,请查看此代码项目文章

于 2012-07-28T06:54:26.340 回答