如何将AD身份验证+ SSO与现有的Forms身份验证Saas Web应用程序集成

时间:2013-02-19 15:18:41

标签: asp.net forms authentication active-directory single-sign-on

我们正在IIS 7.5公共服务器上使用Forms身份验证运行Saas ASP.NET 3.5 Web应用程序,该服务器具有受保护内容,可供数千名用户使用。我们还有一些运行ASP.NET MVC 2的子应用程序。

用户名和密码存储在我们的数据库中,每个用户都附加了角色和组,并定义了权限和访问权限。

现在我们已经被要求通过Active Directory进行简单的SSO登录,以便用户无需输入两次用户名和密码即可登录。这些用户将来自不同的网络和域。

从我们的服务器到LDAP服务器不应该发生用户“同步”。我们不确定是否需要与LDAP进行任何通信,因为所有用户都将在我们的系统中创建并在那里进行维护。表单身份验证将用于我们的大多数用户。

从这里开始,我们不确定哪条路是最佳选择。对于我们的场景,什么是“最佳实践”方式?

2 个答案:

答案 0 :(得分:5)

简单的答案是SAML。它被认为是“最佳实践”,许多大型SAAS提供商都支持它。

SAML协议定义了多个系统之间的单点登录流程。它使用证书在系统之间建立信任。您的应用程序接受包含来自其他系统的属性(用户ID,名称,电子邮件地址等)的断言。您的应用会将用户映射到您的用户商店。

在.NET世界中有几种选择。您可以找到一个实现SAML的库(ComponentSpace有一个)并将其挂钩到ASP.NET身份验证中。您可以使用Windows Identify Framework(WIF)创建自己的。这是大量的WIF视频http://www.cloudidentity.com/blog/2010/06/23/ALL-WILL-BE-REVEALED-7-HOURS-RECORDINGS-FROM-THE-WIF-WORKSHOPS/。您可以尝试使用IdentityServer http://thinktecture.github.io/

根据应用的安全性,您可以选择使用简化方法从可信网络传递用户ID的简单选项。我见过允许用户ID通过URL参数或表单字段发送的应用程序。当然,这是非常不安全的,并且您承担更多风险,因为两个网络之间的信任不是以加密方式强制执行的。您可以通过检查引用者字符串或IP地址来缓解它(例如,如果您可以隔离公司网络的IP范围)。但您仍然可以欺骗,因为任何用户都可以通过简单地替换HTTP请求中的用户ID来冒充他人。

它可能没有完全回答你的问题,但希望能指出你正确的方向。

答案 1 :(得分:1)

我建议调查ADFS 2.0,它在声明映射方面非常强大,并与AD一起使用:http://msdn.microsoft.com/en-us/magazine/ee335705.aspx

您将使用的令牌消费部分将在身份验证循环后接收并解析返回到您的Web服务器的最终声明。