繁体   English   中英

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

[英]Best way for a remote web app to authenticate users in my current web app?

因此,有一点背景知识,我正在使用一个具有一组用户的现有Web应用程序,这些用户能够通过传统的登录屏幕使用用户名和密码等进行登录。

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

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

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

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

  1. 一种使已经在Intranet上进行身份验证的用户登录到我们的系统中的方法,而不会造成太多混乱,并且无需使用外部系统进行身份验证,即LDAP / Kerberos
  2. 此客户端不太特定,可以由其他Intranet轻松实现以登录

即使使用SSL,建议的两个选项也不安全。 切勿在URL上传递凭据,而应使用POST将其放入HTTP请求中。

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

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

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

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

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

本质上,该解决方案具有一个受信任的站点,称为委派身份验证授权机构,该站点具有登录到公司内部网的用户列表。

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

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

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

我知道回答您自己的问题是一种不好的形式,但我希望这对其他可能遇到相同问题的人有所帮助...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM