我的情况是,我的一个客户希望根据以下规则进行双因素身份验证(例如,登录并接收带有访问 URL 的电子邮件):
- 如果用户在 LAN 上,则不需要 2 级身份验证(AD 凭据)。
- 如果用户不在 LAN 上,则需要 2 级身份验证 >> 使用用户名/密码登录(可以是 AD,也可以是其他,我们已经创建了自己的 SSO 解决方案),然后接收到指定邮件地址的电子邮件。
我们的主要问题是很难弄清楚用户来自哪里。原因在于前端的 ISA 服务器基本上剥离了有关客户端的所有信息。在运行应用程序的 ISS 上收到的信息会返回 CLIENT_IP 信息中的 ISA 服务器地址。
那么,当所有流量都经过同一个 ISA 服务器时,我们如何确定用户来自哪里?
一种解决方案是创建一个只能从 LAN 访问的资源,基本上就是说“如果您无法访问此资源,则您实际上不在 LAN 上”。但是 - 这又可能会对超时产生影响 - 例如“尝试查找资源,但 3 秒后超时”。这可能会减慢应用程序的速度,而且我们可能会遇到问题,因为几名员工在世界其他地方工作,而这些地方的线路在访问生产服务器时很糟糕(例如,LAN 上的人员通过固定线路访问服务器可能会遇到无法访问资源的情况,即使他们实际上在 LAN 上)。
我也在 stackoverflow 上问过这个问题,但是当我们了解到 ISA 服务器删除了所有信息时,解决方案就搁浅了。
(我想这篇文章总结了我的问题的根源:http://www.redline-software.com/eng/support/articles/isaserver/security/x-forwarded-isa-track.php)
答案1
我们决定创建一个机制,当客户端在 LAN 上时,该机制将向客户端发出加密的密钥。如果客户端机器无法获得此密钥,则客户端实际上处于 LAN 之外。我们发现它存在一些漏洞,但我们将专注于严格的加密和较短的生命周期以降低风险。