远程Web应用程序在当前Web应用程序中对用户进行身份验证的最佳方式?

时间:2010-03-25 23:38:38

标签: authentication web-applications security intranet

所以有一点背景知识,我正在开发一个现有的Web应用程序,它有一组用户,可以通过传统的登录界面登录用户名和密码等。

最近,我们设法为客户(拥有自己的Intranet网站)打分,他们希望能够让用户登录他们的Intranet网站,然后让他们的用户点击他们的Intranet上的重定向链接到我们的应用程序并自动将它们记录到它。

到目前为止,我有两条关于如何实现这一点的建议:

  1. 创建一个带有2个参数(“用户名”和“密码”)的URL,并让Intranet站点将这些参数传递给我们(我们的连接是通过SSL / TLS进行加密的)。这样可以正常工作,但它似乎有点“hacky”,并且还意味着两个系统上的登录名和密码必须相同(并且必须编写某种可以更新用户密码的Web服务 - 这也是似乎有点不安全)
  2. 向Intranet提供令牌,因此当客户端点击Intranet上的链接时,它会将令牌连同用户名(并且没有密码)一起发送给我们,这意味着他们已经过身份验证。再次,这听起来有点hacky,因为与提供每个人使用相同的密码登录基本相同?
  3. 总而言之,我正在完成以下事项:

    1. 已经在Intranet上进行身份验证的用户登录我们的系统的方法,没有太多麻烦,也没有使用外部系统进行身份验证,即LDAP / Kerberos
    2. 对于此客户端不太具体的东西,可以通过其他内部网轻松实现登录

2 个答案:

答案 0 :(得分:2)

即使您使用SSL,您建议的两个选项也都不安全。永远不要传递URL上的凭据,使用POST将它们放入HTTP请求中。

有一个名为SAML的标准,可用于解决您的问题。挑战在于选择要实施的版本。我会选择SAML 2.0

Google Apps implements一种SAML 2.0,允许您使用Intranet凭据进行身份验证。对于您的应用程序,您将成为服务提供商,您的客户将成为身份提供商。只要您正确实施标准,您就应该能够支持任何新客户端(身份提供商)。以下是您可能需要查看的list SAML实现。如果除了身份验证信息之外,您还需要客户端传递信息,那么SAML可以通过元数据为此提供便利。

您仍然需要实施SSL来加密网络流量。

答案 1 :(得分:0)

我讨厌回答我自己的问题,但我更讨厌一个没有答案的问题。最后,我们使用了SalesForce的委托身份验证SSO实现的非常类似的实现。

http://wiki.developerforce.com/page/How_to_Implement_Single_Sign-On_with_Force.com

本质上,该解决方案具有一个受信任的站点,称为委派的身份验证权限,其中包含登录到公司Intranet的用户列表。

当用户登录公司内部网并点击指向我们应用程序的链接时,公司内部网将把用户名和生成的令牌(在一段时间后过期)传递给我们的应用程序。

我们的应用程序将检查用户名是否在我们的站点上,如果是,则将用户名/令牌(以及源IP和一些其他参数)发送到委派的身份验证机构。如果所有这些项在委派的身份验证权限上匹配,则返回true,用户可以登录。如果返回false,则拒绝用户访问。

我们发现这个系统运行良好,甚至还实现了一些额外的安全功能,如SSL,客户端证书,VPN隧道,甚至限制可以访问站点和委派身份验证权限的IP地址。

我知道回答你自己的问题是不好的形式,但我希望这可以帮助其他可能遇到同样问题的人......