簡體   English   中英

WCF使用自定義UserNamePasswordValidator自托管HTTPS

[英]WCF self hosted HTTPS with custom UserNamePasswordValidator

我有運行良好的WCF服務。

  • 它用於Intranet網絡中。
  • 它是由一個簡單的Windows Form程序管理的自托管服務(無IIS)。
  • WCF客戶端(WPF C#)使用它。

我現在需要為其添加安全性,並且在互聯網上閱讀了很多文章之后,我感到困惑,因為有很多方法可以這樣做。

我需要一個自定義的用戶名和密碼驗證器(我必須調用另一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM