2017-08-09 67 views
1

我想捕獲我的ADFS登錄名給我的SAML令牌。我需要通過瀏覽到ADFS登錄頁面來捕獲SAML。讓用戶登錄,然後在登錄成功時將SAML返回給應用程序。應用程序tehn調用傳遞標頭中的SAML令牌的WCF服務。我有一個網址如:如何打開ADFS登錄屏幕並捕獲SAML

https://adfs.mydomain/adfs/ls/IdpInitiatedSignOn.aspx?RedirectToIdentityProvider=http://adfs.mydomain/adfs/services/trust&loginToRP=https://bcjbsj.com/client-api/api/saml 

我需要在Windows應用程序或控制檯應用程序中獲得此工作枯萎。如果這是不可能的,我可以創建一個ASP .NET應用程序也用於測試。儘管有很多鏈接,但我找不到任何有用的東西。

我可能會錯過這裏的東西。很新的身份驗證。任何幫助或指針都會有所幫助。

回答

1

這很容易使用稱爲JavascriptNotify的技術(偶爾)完成。基本思想是顯示一個WebBrowser控件,通過JavaScript擴展來允許在完成身份驗證後回調到您的應用程序代碼。您需要集中提供或與您的應用程序一起提供一個SP-STS,它提供了主頁領域發現頁面和最終的jsnotify頁面。其餘的UI由可信任的STS處理。您可以選擇使用Azure ACS來填充此角色。

有關調用序列的外觀,請參見Authenticating Users from Passive IPs in Rich Client Apps – via ACSAccess Control Service: Transitioning between Active and Passive Scenarios

Call sequence showing Azure ACS being used to authenticate from a desktop client

要了解如何添加所需window.external方法,請參閱Invoke C# code from JavaScript in a Document in a WebBrowser。 WPF中的Thinktecture has an example client用JST實現javascriptnotify。


由於@Thuan提到,另一個選擇是放棄WS-聯合會支持WS-信託主動認證的被動認證。這種方法的缺點是它的靈活性要差得多,而且你必須自己實現客戶端UI。在編寫實現WS-Trust和WS-Fed RP的應用程序之後,我強烈建議即使在桌面應用程序中使用WS-Fed被動認證。

+0

這真的很棒:D我習慣了用於企業級富客戶端應用程序的方法,但我沒有注意到那些「流」:)學到了一些新東西。 – Thuan

0

該端點用於被動登錄(也稱爲瀏覽器)場景。對於Windows應用程序或控制檯,WS-Trust是更合適的方法。簡而言之,您的應用程序使用WS-Trust協議來調用ADFS以獲取可用於訪問WCF服務的令牌。這種WCF服務稱爲基於聲明的服務或聲明感知服務。這個問題有很多很好的鏈接:WCF, Claims, ADFS 3.0