消费WCF服务的安全/授权

时间:2014-09-07 19:57:37

标签: .net wcf rest authorization credentials

我对WCF有些新意。我已经创建了一项服务,但它确实有效。该服务在XML字符串中接收一些请求的密钥,并返回XML结果集。

这是我的一般性问题,然后我会给出一些具体细节。如果有人使用wsHttpBinding在WCF中创建RESTful服务,那么从外部使用该服务的人是否需要提供用户名/ PW凭证?

好的,细节。在服务器端,这是核心配置:

<services>
    <service behaviorConfiguration="MyService1Behavior"  name="MyRestService">
        <endpoint 
            address="http://(address)/myweb/myrestservice.svc"  
            binding="wsHttpBinding"  
            contract="IMyRestService">
          <identity> <dns value="numeric address" />  </identity> 
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
</services>

和服务应用程序界面:

[ServiceContract]
public interface IMyRestService
{
    [OperationContract]
    [WebInvoke(Method = "GET",
     ResponseFormat = WebMessageFormat.Xml,
     BodyStyle = WebMessageBodyStyle.Wrapped,
     UriTemplate = "OrderLookup/{LookupData}")]
    string OrderLookup(string LookupData);
}

就像我说的那样,当我从完全在域外的系统中使用它时,这一切都有效。

但我必须提供凭证,如下所示:

MyClientService.ClientCredentials.Windows.ClientCredential.Domain = "remoteserver";
MyClientService.ClientCredentials.Windows.ClientCredential.UserName = "UserID";
MyClientService.ClientCredentials.Windows.ClientCredential.Password = "Password";

我有点担心有人试图使用非.NET客户端使用该服务并不想要提供凭据。所以 - 如果我使用WCF创建了一个RESTful服务并在IIS上托管它......有人在外部访问该服务需要提供凭据,还是有办法我可以安全地提出不同的解决方案? / p>

再一次,我意识到我的知识存在差距 - 只是想填补它们。

提前感谢任何建议......

1 个答案:

答案 0 :(得分:0)

正如Marc在他的评论中所述,可以说你所实现的并不是真正的RESTful服务,而是一种基于SOAP 1.2的POX服务。

但是,因为您正在使用wsHttpBinding,所以您可以确信服务和使用者之间的任何流量都将受到standard security settings对此绑定堆栈的限制,而该绑定堆栈又会实现WS-Security soap扩展

这实际上意味着不仅非网络消费者会受到保护,他们也可能struggle to consume this endpoint因为wsHttpBinding的默认设置不是非常开放的互操作性(例如,默认情况下它使用Windows身份验证,如上所述。)

如果您需要支持非.net客户端,请使用使用SOAP 1.1的basicHttpBinding。如果这是您的要求,您可以使用SSL和用户名/密码或证书still secure these endpoints