2014-07-17 254 views
0

我有一個WinForms + WCF + SQL應用程序,我試圖使用內置的WCF安全功能來保護它。指定WCF身份驗證憑據

我處於需要在客戶端使用UserName安全性的位置我明白,無論何時創建代理或通道,我都需要指定ClientCredentials

目前WCF調用了這樣整個客戶端:

private void button1_Click(System.Object sender, System.EventArgs e) 
{ 
    ServiceReference1.Service1Client client = new 
     ServiceReference1.Service1Client(); 
    string returnString; 

    returnString = client.GetData(textBox1.Text); 
    label1.Text = returnString; 
} 

什麼會在這裏最好的辦法是什麼?我是否應該在客戶端代碼中查看代理的每個實例並設置ClientCredentials屬性?我想到的另一種方法是在ChannelFactory中指定憑證一次,並在應用程序周圍傳遞ChannelFactory。這兩種方法似乎都需要大量的返工或重複工作,這讓我覺得我對某些東西沒有注意。

+0

您可以編寫適用 「的」 資格證書或其他憑證,以客戶的擴展方法。很容易實現和使用。 – Herdo

回答

0

您可以實現IClientMessageInspector以在每個傳出消息中包含用戶憑證。

public class ClientMessageInspector : IClientMessageInspector 
    { 
     public object BeforeSendRequest(ref Message request, IClientChannel channel) 
     { 
      var credHeader = new YourCustomHeader 
      { 
       UserName = "UserName", 
       Password = "Password" 
      }; 

      var typedHeader = new MessageHeader<CustomHeader>(credHeader); 
      var untypedHeader = typedHeader.GetUntypedHeader("custom-header", "s"); 

      request.Headers.Add(untypedHeader); 
      return null; 
     } 

     public void AfterReceiveReply(ref Message reply, object correlationState) 
     { 
      // 
     } 
    } 

IClientMessageInspector Interface

Accessing clientcredential properties from client message inspector

Creating Custom WCF Endpoint Behavior

Consuming a web service using digest authentication

+0

請在答案中添加更多內容,以幫助我們理解您的答案。從[如何回答:](http://stackoverflow.com/help/how-to-answer)鼓勵鏈接到外部資源,但請在鏈接中添加上下文,以便您的同行用戶瞭解它是什麼以及爲什麼它在那裏。如果目標網站無法訪問或永久離線,請始終引用重要鏈接中最相關的部分。「 – Herdo