2014-01-13 74 views
2

自從我們一直在努力的一個項目開始以來,我一直假設我們能夠構建一個WCF Web服務,該服務使用傳輸級別的兩個因子認證客戶端證書和WS-Security之後的消息級別用戶名密碼。我們的計劃是實施我們已經完成的消息級別認證,並且一旦我們能夠實現我們自己的認證中心,就添加客戶端證書的要求。帶雙因素認證和BizTalk的WCF Web服務

消息級別認證已運行良好一段時間,現在我們能夠開始實施客戶端證書。我們已經生成了一個客戶端證書,我們正在嘗試在BizTalk中進行設置,這似乎只讓我們選擇客戶端證書或用戶名。安全模式包括無,傳輸,消息,帶消息憑證的傳輸和僅傳輸證書。我選擇帶有消息憑證的傳輸,因爲這似乎與我之後的最接近匹配,但傳輸安全選項已禁用。

是否有可能利用客戶端證書和用戶名/密碼?

enter image description here

+2

您必須創建自定義行爲才能實現此目的。在這裏看到一篇關於雙層認證的文章(非BizTalk),可以幫助http://blogs.msdn.com/b/saurabs/archive/2013/05/05/10349529.aspx – Dijkgraaf

+0

我仍然試圖得到這個加工。在非Biztalk環境中,您的評論有效。基本上,它歸結爲與像這樣一個customBinding配置所述接收位置: <綁定名稱= 「CustomCDARequestEndpointBinding」> <安全authenticationMode = 「UserNameOverTransport」/> < httpsTransport requireClientCertificate =「真」 /> 但是,BizTalk的customBinding配置,沒有'httpsTransport'綁定元素擴展 – Bensonius

+0

那麼現在,你怎麼在BizTalk端口允許'httpsTransport'綁定元素擴展,是讓這個工作的關鍵? – Bensonius

回答

0

客戶端證書可以對已使用WCF-BasicHttp適配器發送端口的端點標識應用,這是傳輸層安全(客戶端證書)。然後在包含的屏幕截圖中顯示的安全選項卡中,提供消息層安全性,這將是用戶名/密碼組合。

下面是身份配置的屏幕截圖。您需要填寫兩個頂部(服務標識)和下段(客戶端標識)

編輯:這個答案是不正確的,我有我的設置錯誤,並將其「工作」,但不是這個原因

enter image description here

+0

你能解釋一下它爲什麼起作用嗎?你真的實現了密碼和客戶端證書認證嗎? – Dijkgraaf

+0

你真的會讓我承認,在IIS中我的客戶端證書設置爲「忽略」?這就是爲什麼我把這是「工作」在上面的引號:(傑里米需要撤銷這個答案。 – Bensonius

+0

是的,因爲然後其他人可以從中學習:-) – Dijkgraaf

2

我要添加另一個答案,只是爲了保持什麼不會在這個問題上的工作歷史。

這就是說,我終於通過customBinding工作。這次我已經三重檢查了IIS是否需要客戶端證書:)

它涉及在一個BizTalk應用程序的接收位置和另一個BizTalk應用程序的發送端口上創建自定義綁定,爲什麼?因爲我們的項目涉及一個Biztalk應用程序發送給另一個。

所以,把一切工作,我只好:

接收位置(接收應用程序)

  • 使用Visual Studio中的WCF發佈嚮導使用重新發布接收應用程序「WCF-CustomIsolated」。我想要一個新的開始,並希望讓BizTalk/Visual Studio做他們的事情而不是猜測。

enter image description here

  • 我去,並在在BizTalk管理控制檯編輯的接收位置。
  • 設置textMessageEncoding messageVersion屬性Soap11,因爲這是我們一直在使用什麼
  • 去除httpTransport綁定元素,因爲如果你不這樣做,你不能添加httpsTransport元素,它需要
  • 添加了security元素。在這一點上,它看起來像這樣(的元素事項順序)

enter image description here

  • security元件具有稱爲authenticationMode的屬性將其切換到UserNameOverTransport。儘管名稱,這是允許用戶名與消息一起發送。在security其他一切留下了默認

enter image description here

  • httpsTransport有一個名爲requireClientCertificate此設置爲「真」一切留下了默認值的屬性。

enter image description here

  • 然後加到這是非常簡單的,之後,接收位置做我們所要求的行爲。

發送端口(發送應用程序)

這是幾乎相同的接收,但只是在發送的,而不是接收位置端口。

  • 在綁定選項卡,我再說一遍所概述的接收位置的具體步驟
  • 行爲標籤,我添加行爲擴展名爲clientCredentials併成立了以下值則ClientCertificate元素,它只是搶客戶端證書位於當前用戶存儲中,用於您的發送端口以運行的服務帳戶。
  • 憑證選項卡我輸入了先前在WCF-BasicHttp適配器發送端口的安全選項卡中輸入的用戶名憑據。

enter image description here

一旦這些全部完成,2個應用程序現在應該能夠同時使用客戶端證書和用戶名,身份驗證來相互交談。

看到我對這個問題的回答,這基本上轉化爲非BizTalk WCF服務。 How to supply both UserName and Client Certificate in WCF client (why does this example work)?

並且不要忘記重新啓動主機實例。

編輯 - 紅利如果你最終導出/部署到不同的服務器,即使您導出和導入/單獨安裝web目錄,你可能會得到一個IIS說,它不能找到端點MyService/Myservice.svc認爲接收端口/位置被禁用。但是,這是因爲它現在是一個WCF-CustomIsolated。解決方案:打開已發佈服務的.svc文件,並將Factory屬性從BasicHttpWebServiceHostFactory更改爲CustomWebServiceHostFactory