8

在企业环境中支持新的 Web 应用程序时,通常需要以特定用户身份登录,以诊断他们遇到的实际或感知问题。这里有两个相反的问题:

  1. 最佳做法是使用散列或加密密码,而不是明文。有时,中间有第三方 SSO(单点登录)。无法检索用户的密码。除非用户提供(不鼓励),否则无法以该用户身份登录。

  2. 许多网络应用程序具有个性化和复杂的授权。不同的用户具有不同的角色(管理员、经理、用户),具有不同的权限。有时用户只能看到他们的数据——他们的客户或任务。一些用户具有只读访问权限,而其他用户可以编辑。因此,每个用户对 Web 应用程序的看法都是独一无二的。

假设在企业环境中,去用户的办公桌或直接连接到他们的机器是不可行的。

你如何处理这种情况?

编辑:我想重申,在全国乃至全球拥有数十万员工的大型金融机构或典型的财富 500 强公司中,某些 IT 部门的开发人员不可能直接访问用户的机器。其中一些是客户使用的面向公众的网络应用程序(例如网上银行和股票交易)。而且,其中许多是依赖 Active Directory 或 SSO 的 Intranet 应用程序,这意味着许多应用程序的用户凭据是相同的。我非常感谢大家的建议;有些可能在其他类型的环境中非常有用。

4

7 回答 7

19

其中一些想法给用户带来了不便,要么强迫他们更改密码,要么占用他们的桌面进行调试会话。

Markc 的想法是最好的:增强您的身份验证逻辑以允许超级用户以特定用户身份登录,方法不是提供用户的凭据,而是提供用户名加上他们的超级用户凭据。

我过去做过这样的事情(伪python):

if is_user_authenticated(username, userpassword):
    login the user
else if ':' in userpassword:
    supername, superpassword = userpassword.split(':')
    if is_superuser_authenticated(supername, superpassword):
        login the user

换句话说,如果用户名和密码没有通过验证,如果密码有冒号,那么实际上是由冒号连接的管理员用户名和管理员密码,所以如果他们是正确的管理员用户名和密码,则以用户名登录。

这意味着您可以在不知道他们的秘密且不会给他们带来不便的情况下以用户身份登录。

于 2008-11-04T21:28:42.353 回答
5

对于我们的 Web 应用程序,我们使用的过程由于缺乏更好的术语而被定义为“劫持”用户帐户。

基本上,管理员可以通过一个简单的按钮点击来“劫持”用户的帐户。在代码中,您只需使用唯一标识符(用户 ID 在不太安全的环境中工作),然后在会话中建立必要的凭据,以便它们可以在该用户的配置文件中工作。对于更安全的环境,您可以为每个用户使用唯一的哈希。

为了确保这种劫持方法是安全的,它总是首先验证请求是由具有适当权限的经过身份验证的管理员发出的。因此,有必要劫持管理员的会话或捕获他们的身份验证凭据,以便有人利用应用程序中的劫持功能。

于 2008-11-04T21:03:49.003 回答
2

我有4个想法。当我打字时,其中 3 个已经被建议(所以我赞成)

想法 3 的变体 - 模仿:

为了使这与正常登录“尽可能相同”且代码更改最少,您可以添加在登录时直接模拟的能力,方法是提供管理员凭据和备用用户名,例如登录为 Admin:user、adminpassword。系统会将其视为使用 userpassword 以用户身份登录。

想法 4:您可以访问密码存储区吗?如果是这样,暂时用已知密码的哈希替换用户的哈希。(密码通常在线存储在数据库中。SQL 查询工具可以进行交换)

于 2008-11-04T21:05:18.297 回答
1

管理员应该能够更改用户的密码。将用户的密码更改为您知道的密码。然后,您可以以该用户身份登录。

完成调试后告诉用户重置他/她的密码。

于 2008-11-04T20:50:21.573 回答
1

通常通过某种远程控制软件,可以用来查看他们的桌面。如果它们位于 Windows 终端服务器上,则可以使用内置的管理工具。否则我会在内部网络上使用 VNC 之类的东西,或者像 LogMeIn ( http://www.logmein.com/ ) 这样的外部服务。

于 2008-11-04T20:51:54.673 回答
0
  1. 您能否拥有一个测试环境,在该环境中定期剪切复制到的实时数据(显然已经过清理以解决任何安全或数据保护问题)。如果允许,可以使用与设置类似的用户进行故障排除,或者实际上是该用户。

  2. 使用其他答案中提到的远程桌面客户端,但这对您来说可能并不实用。如果您在域内拥有这些权限,我听说过错误处理,甚至会进行屏幕截图并将其包含在日志中!但这对我来说听起来有点奇怪。

  3. 您可以使用管理工具将用户克隆到演示帐户吗?

于 2008-11-04T21:02:52.450 回答
0

我们在 Web 应用程序中使用的解决方案是让 authN/authZ 返回所需用户作为有效用户。我们通过一个管理功能来设置伪装,然后当我们询问当前登录的用户(current_user)时,我们处理伪装:

  def current_user_with_effective_user
    if masked?
      current_user_without_effective_user.masquerade_as
    else
      current_user_without_effective_user
    end
  end
  alias_method_chain, :current_user, :effective_user
于 2009-05-15T17:26:12.107 回答