2017-08-09 83 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