OKB*_*OKB 2 asp.net authentication winforms wif single-sign-on
我被指派在我们的产品中找到一种实施SSO的方法.我们有几个Winform应用程序和一个asp.net 4.0 Web应用程序(不是MVC).
所有产品都是使用.Net 4.0构建的,Web应用程序是ASP.NET 4.0.一些Winforms通过Web服务(asmx)与我们的API进行通信,有些则直接使用我们的API.Web应用程序也使用相同的API.我们提供一组Web服务(asmx),它们使用相同的API到外部客户端.
目前,我们在系统中拥有自己的身份验证实现(用户,密码,角色),我们希望用SSO替换它.或者这两种认证制度能以某种方式共存吗?Winforms用于Intranet,Web应用程序在Intranet中使用,我们还为客户端托管Web应用程序(可从Internet访问).
用户是在我们的系统中创建的,但同时我们使用自己的工具从Active Directory导入用户.Active Directory确实是主要的用户来源.
我读过有关Windows Identity Foundation的内容,我想知道是否可以使用它来实现SSO.但我不明白的是如何在winform应用程序中直接使用API时使用WIF.
我想要实现的是从我们的系统中删除所有用户管理并使用Active Directory作为用户源.我想这意味着使用ADFS 2.0创建声明等.
我可以在此实现中使用.Net Framework 4.5(我知道WIF现在是.Net Framework 4.5中的一等公民).
你有什么建议怎么做?WIF是在winforms应用程序和Web应用程序中实现SSO的最佳替代方案吗?
有一种方法可以从WinForms应用程序中获取WIF身份验证cookie.
为此,您只需托管WebBrowser控件并将其指向Web应用程序的登录页面.假设Web应用程序与ADFS2联合,Web浏览器控件将自动跟随流 - 它将重定向到ADFS并停在那里以显示用户凭据的提示(表单身份验证模式下的ADFS2)或仅使用NTLM/Kerberos进行身份验证( Windows身份验证模式下的ADFS2).然后,Web浏览器将重定向回您的应用程序.
这是您挂钩代码的地方.您只需在Web浏览器的导航事件中添加处理程序,然后在ADFS2.0对用户进行身份验证后检查它何时返回到您的应用程序.然后,您可以InternetGetCookie在WinForms应用程序中调用该方法以获取应用程序发出的所有身份验证cookie,您可以关闭承载Web浏览器的窗口.
此时,您拥有WIF(SessionAuthenticationModule)为您的应用程序发出的所有身份验证cookie .您现在可以调用应用程序Web服务并将cookie注入http调用.Web服务器将正确识别用户身份验证,这意味着您所要做的就是为Web服务添加适当的授权(PrincipalPermission您的Web方法应该这样做).
另一种方法是从Web应用程序公开WCF服务,并使用WS-Federation主动身份验证来保护它们.这种方法的缺点是(在我看来)如果您的身份提供者(ADFS)进一步与另一个身份提供者联合,而该身份提供者不一定实现WS-Trust/WS-Federation,那么主动身份验证可能会失败(因为另一个身份提供者没有实现它)虽然被动方案仍然有效(一堆重定向将很快结束,一个页面要求用户提供凭证,但连续身份提供者之间的身份验证协议流无关紧要).
| 归档时间: |
|
| 查看次数: |
2909 次 |
| 最近记录: |