WCF分布式開發常見錯誤(22):The caller was not authenticated...如何在XP系統為WCF設定可信任的認證
我在XP 專業版系統進行WCF安全編程的時候,遇到的錯誤。使用的安全驗證 方式是: UserName and Password Security 綁定協議:.WSHTTPBinding。我 會把如何在XP環境下設定可信認證的過程,詳細的描述出來。因為這個錯誤就是 和認證有直接關係,對於很多XP環境下進行WCF編程的學習者來說,應該有不錯 的參考價值。錯誤資訊:The caller was not authenticated by the service 。服務驗證調用者失敗。XP系統配置認證還似乎比較麻煩,你像Windows伺服器 系列,我們可以建立CA來控制認證的狀態。雖然我們可以自己安裝。但是過於麻 煩。正如申請一個免費的認證一樣。僅僅為了個人學習,一切都希望簡單,快速 地學習WCF的安全編程。我這裡也是使用了makecert製作的認證。
設定了伺服器憑證,訊息安全模式。 我搜尋的資料。如下:
The caller was not authenticated by the service - WCF Security using ...
The caller was not authenticated by the service
Caller was not authenticated by the service
WCF - The caller was not authenticated by the service
WCF - TCP+Cert "The caller was not authenticated by the service." 但是沒什麼協助,類似的問題很多都是沒有解決。問題我也放到WCF中文和英文 論壇:
http://social.microsoft.com/Forums/zh-CN/wcfzhchs/thread/cd3f0247- a1b4-43c0-af1c-7b0e609b1e3b
http://social.microsoft.com/Forums/zh-CN/wcf/thread/3a5417c6-fdd1- 47d7-9757-ebc8ede7affb。
【1】問題描述:錯誤資訊的截圖:
一樣採用UserNamePasswordValidator驗證方式。wsHttpBinding,此綁定支 持WS安全規範。必須啟動服務端認證。 WCF分布式開發常見錯誤(21):unable to open its IChannelListener.分發器未能開啟接聽程式 ,已經遇到過一次了問題。 當時導致錯誤的原因是沒有啟用服務端認證。 這個錯誤修正完畢以後,再次啟 動服務,加入服務參考,產生了用戶端代理等相關檔案。 服務行為的認證配 置資訊如下:
<serviceBehaviors>
<behavior name="WCFService.WCFServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceCredentials>
<serviceCertificate x509FindType="FindBySubjectName" findValue="MyServer" storeLocation="CurrentUser"/>
<clientCertificate >
<authentication certificateValidationMode="None" />
</clientCertificate>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="WCFService.MyUserNamePasswordVali dator,WCFService" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
這句話就是服務端查詢認證的依據:<serviceCertificate x509FindType="FindBySubjectName" findValue="MyServer" storeLocation="CurrentUser"/>。在CurrentUser位置,尋找主題為 MyServer的認證。
使用x509認證是符合WS安全規範。認證是非對稱式加密演算法的典型應用。至於 如何獲得非對稱式加密、認證,我在之前的系列文章裡已經詳細講過,需要的話可 以再參考:WSE3.0構建Web服務安全(2):非對稱式加密、公開金鑰、密鑰、認證、簽名 的區別和聯絡以及X.509 憑證的獲得和管理