2013-03-21 63 views
1

幫助! :)我沒有試圖讓下面的工作問題結束(提前道歉,如果我不使用精確的正確的術語):)使用帶WCF通道和Weblogic服務的SAML2令牌

我需要一個.NET Web應用程序(客戶端)進行通信Weblogic Web服務使用SAML 2策略進行保護。有一些限制,我需要使用.NET 3.5/4,因此我使用WIF(帶擴展)與配置爲生成SAML2令牌的ADFS2協同工作。

網站 - > adfs2 - > SAML2標誌位是工作的罰款,到目前爲止 - 我肯定通過獲得令牌。

附加(1) - Weblogic服務必須使用SAML2策略來實現發件人確認方法,儘管默認情況下ADFS 2提供了承載,但在我們通過線路發送令牌之前,我能夠操縱SAML斷言到服務。

其他(2) - 的原因很多,web服務不通過SSL達到和basicHttpBinding的是我唯一的選擇。

現在的問題 ..我只是不能使用Weblogic以這樣的方式爲在發送請求令牌通信(任何登錄嘗試返回一個神諭「一般的Web服務安全性的錯誤」,因爲那裏是沒有請求中的有效安全頭)。首選的方法是通過WCF,使用通道工廠 - 下面的代碼是什麼,我已經嘗試了粗略的例子 - claimsidentity /令牌的東西是從與WIF擴展的東西來了代碼示例採取:

IClaimsIdentity identity = Thread.CurrentPrincipal.Identity as IClaimsIdentity; 
Saml2SecurityToken token = identity.BootstrapToken as Saml2SecurityToken; 

BasicHttpBinding binding = new BasicHttpBinding(); 
binding.Security.Mode = BasicHttpSecurityMode.None; 
binding.Security.Transport.ClientCredentialType = HttpClientCredntialType.None; 

EndpointAddress address = new EndpointAddress("http://someaddress"); 

ChannelFactory<weblogicService.MyService> factory = new ChannelFactory<weblogicService.MyService>(binding,address); 

factory.ConfigureChannelFactory<weblogicService.MyService>(); 
factory.Credentials.SupportInteractive = false; 
weblogicService.MyService proxy = factory.CreateChannelWithIssuedToken<weblogicService.MyService>(token) 
proxy.DoSomething(); 

在以下職位的答案(和其他地方我已經能找到): WCF and WebLogic SAML interop

..是我在做什麼 - 但能否通過實現客戶觀看使用Wireshark或者交通MessageInspector並在「BeforeSendRequest」中查看請求,我看不到任何標記的符號(並且請求被拒絕作爲結果編輯)。

另外,如果我操縱令牌包括寄件人先天不足,或只是離開它,因爲它本來也沒關係。

附加(3):如果我不使用ADFS2/SAML/WIF/WCF等,我已經能夠成功地與Weblogic服務進行通信,而是通過更基本的WSE2.0/3.0 Web引用的方法(即創建SoapRequest,用戶名標記等)

這問題,就是在沒有用戶交互提供有效的用戶名和密碼。換句話說,保持「SSO方法」,而不必實現Forms Authentication(或等效)以每次獲取用戶證書。似乎沒有任何明顯的方式使用由ADFS和WSE生成的SecurityToken要麼..

任何人都可以幫助擺脫一些光?爲什麼WCF通道工廠使用提供的令牌不能正常工作,即在調試時沒有有效令牌的標誌,並且Weblogic肯定沒有收到有效的SAML令牌。

我也看着去CustomMessageEncoder路線,並將SAML Assertion添加到SOAP標頭中,但是從我已經能夠發現的情況來看,它確實不應該這麼困難。 WCF中的東西壞了嗎?

+0

Hello Mac。關於您的第三點(附加(3)),也許我可以建議您採取以下解決方法:如果您可以在.NET客戶端中獲得用戶憑據,請通過「Authorization:Basic encodedCredentials」標題將它們包含在HTTP請求中。我知道這不是最好的方法,但... – Gaucho 2013-03-22 08:19:11

+0

嗨,謝謝你的回覆。額外的(3)實際上是最後的手段,因爲需要避免讓用戶在登錄網站時輸入他們的憑證。真正令人頭疼的是,SAML2/Channelfactory方法*可能*工作,但它不是:(可能還有其他基本的HTTP綁定設置或我可以使用的自定義行爲,但我不確定它們會是什麼樣的。 – 2013-03-22 09:08:40

+0

好吧,它看起來是導致我的問題的因素的組合,不僅僅是目標Web服務的配置所施加的限制,目前無法改變 - 返回到繪圖板;) – 2013-03-27 13:42:10

回答

0

終點結合限制(basicHTTP)不支持SAML2 AFAIK,也ADFS2。0似乎只提供承載令牌並在事實之後修改令牌也不是啓動器(WIF中的建議覆蓋操作似乎不像預期的那樣工作),並且最終因爲Web服務不在https後面,沒有安全模式(這是唯一可以使用的模式)意味着無論如何都不會發送令牌。啊,回到繪圖板!