2010-03-25 97 views
3

所以有一点背景,我正在研究一个现有的Web应用程序,它有一组用户,他们可以通过传统的登录屏幕用用户名和密码登录等。远程Web应用程序在我当前的Web应用程序中验证用户的最佳方式?

最近我们已成功为客户(拥有自己的Intranet站点)评分,他们希望能够让他们的用户登录到他们的Intranet站点,然后让他们的用户点击Intranet上的链接,该链接重定向到我们的应用程序和日志他们自动进入它。

我对如何实现这一迄今为止两点建议:

  1. 创建这需要2个参数(这是“用户名”和“密码”),并有内部网站通过这些参数的URL给我们(我们的连接是通过SSL/TLS进行的,因此全部加密)。这样可以正常工作,但似乎有点“黑客”,也意味着两个系统上的登录名和密码必须相同(并且必须编写某种可以更新用户密码的Web服务 - 这也是似乎有点不安全)
  2. 向Intranet提供一个令牌,所以当客户点击Intranet上的一个链接时,它将令牌发送给我们,以及用户名(并且没有密码),这意味着它们被认证。再说一次,这听起来有点不好意思,因为这与提供给每个人使用相同密码登录的基本相同?

所以总结一下,下面的事情后,我:

  1. 一种方式,谁已经验证Intranet上的用户登录到我们的系统中没有太多的插科打诨,而无需使用外部系统进行身份验证,即LDAP/Kerberos的
  2. 东西是没有太具体到这个客户端,并且可以很容易被其他企业内部网来实现登录

回答

0

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

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

本质上的解决方案具有受信任的站点,被称为委托认证授权,谁拥有谁登录到公司内网用户的列表。

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

然后,我们的应用程序将检查用户名是否在我们的网站上,如果有,请将用户名/令牌(连同源IP和其他一些参数)发送到委托认证机构。如果所有这些项目在委托认证权限上匹配,则它返回true并且用户可以登录。如果它返回false,则拒绝用户访问。

我们发现这个系统工作得很好,甚至还实现了SSL,客户端证书,VPN隧道等一些额外的安全功能,甚至限制了可以访问该站点的IP地址和委派的认证授权。

我知道这是不好的形式来回答你自己的问题,但我希望这可以帮助别人谁可能会有同样的问题...

1
双方你建议OPTIO的

即使您使用SSL,ns也是不安全的。永远不要在URL上传递凭证,并使用POST将它们放入HTTP请求中。

有一个标准叫SAML,这可以用来解决你的问题。挑战在于选择要实施的版本。我会选择SAML 2.0

Google Apps implements是SAML 2.0的一种风格,并允许您使用Intranet凭证进行身份验证。在您的应用程序中,您将成为服务提供者,您的客户将成为身份提供者。只要你正确地实施标准,你应该能够支持任何新的客户端(身份提供者)。以下是您可能需要查看的SAML实施的list。如果您需要客户端传递除了身份验证信息之外的信息,则SAML可以通过元数据来实现这一点。

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

相关问题