4

所以有一点背景知识,我正在开发一个现有的 Web 应用程序,它有一组用户,他们能够通过传统的登录屏幕使用用户名和密码等登录。

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

到目前为止,我对如何实现这一点有两个建议:

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

总而言之,我追求以下几点:

  1. 一种让已经在 Intranet 上通过身份验证的用户登录到我们系统的方式,无需太多麻烦,也无需使用外部系统进行身份验证,即 LDAP / Kerberos
  2. 对这个客户端不太具体的东西,可以很容易地由其他 Intranet 实现以登录
4

2 回答 2

2

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

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

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

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

于 2010-03-25T23:41:14.747 回答
0

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

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

本质上,该解决方案有一个受信任的站点,称为委托身份验证机构,该站点拥有登录到公司 Intranet 的用户列表。

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

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

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

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

于 2012-03-05T23:56:27.270 回答