我相信你想使用HTTPS來確保傳輸級別的加密和簽名。您需要首先使用SSL證書配置IIS7.5,並在託管該服務的應用程序中允許https。檢查this tutorial但您將使用您的現有證書,而不是創建自簽名。應爲您的站點的主機標頭(例如mydomain.com)或您的服務器的名稱(如果直接暴露)創建證書。
在您的服務中,您需要具有傳輸安全性和消息憑證的basicHttpBinding以進行身份驗證。
<bindings>
<basicHttpBinding>
<binding name="secured">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="securedService">
<serviceMetadata httpsGetEnabled="true" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" userNamePasswordValidator="..." />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="..." behaviorConfiguration="securedService">
<endpoint address="" contract="..." binding="basicHttpBinding" bindingConfiguration="secured" />
<endpoint address="mex" contract="IMetadataExchange" binding="mexHttpsBinding" />
</service>
</services>
客戶將使用類似的設置:
<bindings>
<basicHttpBinding>
<binding name="secured">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint name="..." address="https://..." contract="..." binding="basicHttpBinding" bindingConfiguration="secured" />
</client>
該構成,構成SOAP 1.1服務符合固定在HTTPS傳輸,並通過用戶名和密碼保護。服務還通過HTTPS公開其元數據(WSDL)。用戶名和密碼由自定義密碼驗證器進行驗證(您必須implement one)。
您將設置客戶端憑證(通過添加服務引用生成):
var client = new MyServiceClient();
client.ClientCredentials.UserName.UserName = "Name";
client.CleintCredentials.UserName.Password = "Password";
信息的加密傳輸層上完成的。每次創建新代理時都必須配置證書,但是它們可以重用於來自代理的所有呼叫。恐怕不是您的方案需要
WsHttpBinding的。設置ProtectionLevel
僅用於消息級別的安全 - 我認爲這不是你正在尋找的。
不要用你描述自定義身份驗證:
驗證方案將驗證 用戶名/密碼在第一次 認證。然後從那麼 客戶機上將使用隨機生成的 代碼作爲其身份驗證。
這要複雜得多。您將推出自己的解決方案,這將是非標準的,或者您將使用WCF的內置實現(安全對話),但並非每個客戶端SOAP堆棧都能夠使用此類服務(它完全依賴於高級消息安全性)。
我不需要使用WSHttpBinding,因爲它對郵件進行加密而不是以明文形式發送:''您必須注意的一個最大的區別是安全方面。默認情況下,BasicHttpBinding以純文本形式發送數據,而WsHttpBinding將它在加密和保護的方式「'(http://www.codeproject.com/KB/WCF/HttpBinding.aspx) – michael 2011-05-02 20:25:45
**默認情況下**,但我不使用默認配置 - 我創建的自定義配置basicHttpBidning使用運輸安全。 – 2011-05-02 20:30:13