2012-03-27 84 views
1

當我嘗試從另一個asp.net應用程序(IP)驗證的asp.net應用程序(RP)調用WCF服務時,出現錯誤消息與登錄頁面的內容(它試圖到達登錄頁面,因爲它無法驗證請求)。將SAML令牌傳遞給Asp.Net的WCF服務

身份提供者:_http://localhost/AuthenticatonWS/Login.aspx

依賴方網站:_http://localhost/RPWebsite/Default.aspx

WCF服務:_http://本地主機/ RPWebsite/service1.svc

(在我的解決方案我打電話從default.aspx.cs service1.svc)

我不希望該服務是匿名的。目前該網站(RP網站)使用STS並且信任本地身份提供商,但在生產中它可以信任通過ADFS的任何外部身份提供商。

任何人都可以指導我如何將令牌信息從aspx頁面傳遞到服務,我嘗試了幾個來自互聯網的例子,但是我無法得到它的工作。

回答

0

問題很可能是RP網站在<system><httpModules><system.webserver><modules>web.config中使用ClaimsAuthorizationModule。這會導致任何Web服務調用都被重定向到STS進行身份驗證,就像它是一個交互式瀏覽器請求一樣,正如您所看到的那樣。

或者,此模塊可以添加到web.config的WIF特定部分,即<microsoft.identityModel><service>中,在這種情況下,此模塊僅用於基於聲明的WCF Web服務調用。您可以使用以下格式添加它:<claimsAuthorizationManager type="MyNamespace.CustomClaimsAuthenticationManager, MyAssembly"/>。 (此類型必須擴展ClaimsAuthorizationManager,如WIF文檔頁面"ClaimsAuthenticationManager, ClaimsAuthorizationManager, and OriginalIssuer"中所述。)

參考:Vittorio Bertocci,「Programming WIF」,p。 43.

0

我覺得有幾個選項:

  1. 使用持久性身份驗證Cookie支持多個客戶端會話。或者在您的RP和WCF服務之間支持共享會話,以便WCF可以在RP向WCF服務發起呼叫時重新利用爲RP發佈的認證Cookie。說實話,我從來沒有試圖實施這個行動。這僅僅是我的理論。
  2. 創建一個單獨的認證服務,不需要用戶交互(如輸入用戶名/密碼)。然後你有很多方法可以從你的RP呼叫WCF:
    • 從你的RP請求認證服務爲WCF發出令牌;將令牌附加到WCF調用的請求標頭中(例如:授權);然後調用WCF服務。這需要一個自定義的HttpModule接受包含WCF服務標記的自定義請求標頭。
    • 從您的RP中,您還可以存儲用戶名/密碼或可識別用戶的唯一用戶身份聲明;將這些信息附加到WCF調用的請求標頭中(例如:授權);然後調用WCF服務。這也需要自定義的HttpModule接受WCF服務的自定義請求頭。

我推薦第二個選項,其中你可以從Dominick Baier's blog找到更多有用的信息和指導。

只是我的2美分。