我对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>
再一次,我意识到我的知识存在差距 - 只是想填补它们。
提前感谢任何建议......
答案 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。