日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WCF 第八章 安全 客户端认证

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WCF 第八章 安全 客户端认证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一個服務的客戶端認證是通過向服務提供一系列信賴的聲明。聲明可以是任何形式,只要客戶端和服務端理解這個格式并信賴它的來源就可以。

? 如果客戶端和服務端共享一個秘密信息,比如一個用戶名和密碼,只要客戶端通過一個合法認證發送數據,服務端就相信客戶端所說的。這是HTTP基本認證架構。在一個客戶端機器和服務器運行在活動目錄或者域中定義的賬戶的Windows-Only環境中,客戶端和服務端已經是一種信賴關系。在這種情況下,可以使用Windows 認證,而Kerbeors或者NTLM令牌將會使用。如果客戶端和服務端都信賴一些第三方組織而且不是一個Windows域的一部分時,基于證書的認證時最適合的,這樣客戶端可以從源獲取一個服務端信任的證書并發送給服務端。

? 當安全模式設置為Transport時,一個服務端在transport元素的clientCredentialType屬性中確定客戶端認證要求。這是通過在服務端的服務描述中的綁定配置中完成的,可以在配置文件中或者代碼中定義。不同的綁定有不同的客戶端認證元數據。表8.1簡要列出了內建綁定的選項。

表8.1 傳輸安全的客戶端認證

? 當使用基于傳輸安全的客戶端認證時,客戶端必須在發送消息前向信道附加聲明??蛻舳吮仨毟郊臃戏找蟮穆暶?。例如,如果基本認證需要一個基于HTTP的綁定,客戶端必須發送一個用戶名和密碼。如果有任何綁定需要證書認證,客戶端必須使用它的私鑰對消息簽名并從一個由服務端信賴的權威組織發送一個數字證書(如果服務端還沒有數字證書)。

使用基本認證和basicHttpBinding的認證過程

列表8.4, “使用basicHttpBinding加密”,描述了一個使用basicHttpBinding傳輸安全模式來通過SSL實現加密的服務配置文件。為了向這個例子中添加用戶名/密碼,需要將clientCredentialType屬性改為Basic.列表8.6顯示了一個實現的一個要求在傳輸層認證的改變的配置文件的片段。這個服務將很適合互聯網通信因為認證通過一個安全傳輸層傳輸。

列表8.6 使用basicHttpBinding的基本認證

<basicHttpBinding><binding name="MyBinding"><security mode="Transport"><transport clientCredentialType="Basic"><extendedProtectionPolicy policyEnforcement="Never" /></transport></security></binding></basicHttpBinding>

? 當使用基本認證時,客戶端必須向服務端傳遞一個用戶名和密碼。這個使用一個代理類或者直接在信道上完成的。列表8.7顯示了終結點使用basicHttpBinding和基本認證向服務端傳輸證書的客戶端代碼。

列表8.7 從一個客戶端傳遞用戶名和密碼

proxy.ClientCredentials.UserName.UserName = "MyDomain\\Me";

proxy.ClientCredentials.UserName.Password = "SecretPassword";

? 當安全風險不是很大時且在一個客戶端和一個服務端共享一條私有消息是可行的時候使用基本認證模式或者用戶名/密碼認證模式是合適的。因為密碼很容易存儲在人們桌面上的即時日志中,數據庫表里或者配置文件中,所以它們很容易被拷貝或者不被注意的情況下被查看。為了保持它們”新鮮”,它們頻繁的無效(“你的密碼將會在10天內過期”)所以有額外的開銷涉及進來。額外的,因為人們常常在多個賬戶中重用同一個密碼,一個賬戶的危機可能導致其他系統危機。

使用Windows 證書認證

其他的認證方案比用戶名/密碼方式更加更全。如果你在一個有活動目錄的Window 環境中工作,可以使用Windows認證。這需要客戶端的用戶/進程的身份信息并向服務端發送這些證明信息。這是一個單點登錄解決方案,在這個方案中檔用戶登錄到Windows域中后,用戶的證書可以可以自動的從客戶端機器傳輸到服務端。當使用Windows認證時,列表8.7顯示的客戶端代碼就不需要了。列表8.8顯示了使用Windows認證的net.tcp綁定。

列表8.8 使用basicHttpBinding的Windows認證

<basicHttpBinding><binding name="MyBinding"><security mode="Transport"><transport clientCredentialType="Windows"><extendedProtectionPolicy policyEnforcement="Never" /></transport></security></binding></basicHttpBinding>

使用證書和netTcpBinding認證

數字證書相比密碼可以提供一個更加廣泛形式的驗證。對要求安全的場景來說,快,基于證書的通信,netTcpBinding是一個好的選擇。可以在復雜局域網中找到證書與混合安全模式一起工作,包括Windows, UNIX和第三方的LDAP 認證。在互聯網上,如果你需要快速的,安全的服務到服務的通信,而且你可以確定哪個防火墻端口打開了,netTcpBinding可以證明是非常有價值的。使用基于證書的NetTcpBinding連接了快速通信和魯棒性安全。

? 列表8.9 顯示了一個使用傳輸層安全的服務配置和一個基于證書的客戶端認證。有很多點是沒有價值的。首先,服務通過在NetTcpBinding綁定中使用clientCredentialType來配置為需要客戶端證書。其次,服務的證書在<serviceCredential>節點中確定。這是必要的以便于服務端知道在SSL握手中使用哪個證書和密鑰。第三,服務端通過確定PeerTrust為certificationValidationMode配置去忽略驗證客戶端證書的路徑。當與通過MakeCert.exe生成的證書一起工作時這是必須的,而不是獲取的真實證書或者從一個可信賴組織生成的。

列表8.9 使用NetTcpBinding的證書認證

<?xml version="1.0" encoding="utf-8" ?> <configuration><system.serviceModel><bindings><netTcpBinding><binding name="MyBinding"><security><transport clientCredentialType="Certificate"><extendedProtectionPolicy policyEnforcement="Never" /></transport><message clientCredentialType="None" /></security></binding></netTcpBinding></bindings><behaviors><serviceBehaviors><behavior name="metadata"><serviceMetadata httpGetEnabled="true" /></behavior><behavior name="NewBehavior"><serviceCredentials><clientCertificate><authentication certificateValidationMode="PeerTrust" /></clientCertificate><serviceCertificate findValue="localhost" x509FindType="FindBySubjectName" /></serviceCredentials></behavior></serviceBehaviors></behaviors><services><service behaviorConfiguration="metadata" name="EssentialWCF.EmployeeInformation"><endpoint address="" binding="netTcpBinding" bindingConfiguration="MyBinding"contract="EssentialWCF.IEmployeeInformation" /><endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""contract="IMetadataExchange" /><host><baseAddresses><add baseAddress="http://localhost:8000/EffectiveWCF" /><add baseAddress="net.tcp://localhost:8001/EffectiveWCF" /></baseAddresses></host></service></services></system.serviceModel> </configuration>

為了在客戶端和服務端之間初始化通信,客戶端必須確定一個用來認證的證書。這可以在配置文件中或者代碼中完成。列表8.10顯示了為在認證中使用的服務附加一個證書到信道的客戶端代碼。在對等信賴下,服務將在它的可信賴人文件夾中尋找證書。如果找到了,訪問將會被允許;如果找不到,訪問將會被拒絕。

列表8.10 證書認證的客戶端代碼

Employee employee = new Employee(358, "Daniel", "Dong", "210");EmployeeInformationClient proxy = new EmployeeInformationClient();proxy.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.PeerTrust;proxy.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "MyClientCert");try{Employee e = proxy.UpdateEmployee(employee);Console.WriteLine("Name is: {0}", e.FirstName);}catch (Exception ex){Console.WriteLine(ex.Message);}

轉載于:https://www.cnblogs.com/danielWise/archive/2011/01/11/1933206.html

總結

以上是生活随笔為你收集整理的WCF 第八章 安全 客户端认证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。