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

Ken*_*eth 5 forms asp.net 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进行任何通信,因为所有用户都将在我们的系统中创建并在那里进行维护.表单身份验证将用于大多数用户.

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

Ser*_*gey 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来冒充他人.

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