[英]WCF self hosted HTTPS with custom UserNamePasswordValidator
我有運行良好的WCF服務。
我現在需要為其添加安全性,並且在互聯網上閱讀了很多文章之后,我感到困惑,因為有很多方法可以這樣做。
我需要一個自定義的用戶名和密碼驗證器(我必須調用另一個Web服務才能知道用戶是否被授權)。 我還需要客戶端和服務器之間的安全通信。
我目前正在使用basicHttpBinding。 MS建議在我的情況下使用NetTcpBinding( https://msdn.microsoft.com/en-us/library/ff648863.aspx#TransportSecurityWCF ),但是我不確定這是否安全?
我認為我最好使用WsHttpBinding來具有SSL:您是否認為此鏈接為我的情況提供了適當的解決方案? https://msdn.microsoft.com/zh-cn/library/ms733775.aspx ?
感謝您的建議
您可以使用BasicHTTPBinding進行SSL /傳輸加密。 那不需要改變; 您只需要為主機端設置“傳輸”安全性,添加一些代碼和證書,即可繼續進行而無需更改太多代碼。 我可以在下面添加一個小代碼示例,因為我通過自助服務完成了您要嘗試的操作。
BasicHttpBinding b = default(BasicHttpBinding);
if (bUseSSL) {
//check for ssl msg credential bypass
if (bSSLMsgCredentialBypass) {
b = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);
} else {
b = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
}
b.TransferMode = TransferMode.Buffered;
b.MaxReceivedMessageSize = int.MaxValue;
b.MessageEncoding = WSMessageEncoding.Text;
b.TextEncoding = System.Text.Encoding.UTF8;
b.BypassProxyOnLocal = false;
//b.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;
}
身份驗證/授權也可以完成,而無需更改當前的內容。 您確實有兩個選擇:
一種是創建一個Login函數,該函數在客戶端首次訪問主機時被調用。 然后,您將一些令牌值發送回客戶端以進行所有后續通信。
另一種方法是使用Dispatcher.IDispatchMessageInspector中的消息檢查器功能以及一個稱為AfterReceiveRequest的公共函數來創建自定義身份驗證檢查。 在該函數中,您可以檢查從客戶端發送的UserID和Pwd(在HTTP標頭數據中),但是您需要在客戶端和主機端都實現此功能,否則它將無法正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.