2008-11-04 78 views
8

在企业环境中支持新的Web应用程序时,通常需要以特定用户身份登录才能诊断他们正在遇到的实际或已知问题。两个对立的问题,在这里适用:您如何使用哈希或加密密码支持Web应用程序?

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

  2. 很多网络应用程序都有个性化和复杂的授权。不同的用户具有不同的权限(admin,manager,user)。有时用户只能看到他们的数据 - 他们的客户或任务。一些用户具有只读访问权限,而其他用户可以编辑。所以,每个用户对Web应用程序的看法都是独一无二的。

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

你如何处理这种情况?

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

回答

19

许多的这些想法不便的用户,无论是迫使他们改变自己的密码,或通过占领桌面为你调试会话。

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

我已经做了这样的过去(伪上下的蟒蛇):

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 

换句话说,如果用户名和密码不进行身份验证,如果密码有一个冒号,然后它实际上是由冒号加入的管理员用户名和管理员密码,所以如果他们是正确的管理员用户名和密码,请以用户名登录。

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

1

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

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

+4

这是不幸的:为什么要对用户造成不便,因为你在调试? – 2008-11-04 21:23:39

+0

是的。如果可以“克隆”用户帐户并使用该帐户,最终用户可能不会感到不方便。这可能也可能不可行。此外,如果您可以使用'debuguser'帐户查看问题,那也可能更可取 - 但它可能无法重现。 – 2008-11-04 21:36:22

1

通常通过某种可用于查看其桌面的远程控制软件。如果他们在Windows终端服务器上,那么可以使用内置的管理工具。否则,我会在内部网络或类似LogMeIn(http://www.logmein.com/)的外部服务中使用类似VNC的内容。

0
  1. 你可以有一个测试环境,其中有复制到(显然消毒,以满足任何安全或数据保护问题)实时数据的定期切换。如果允许,可以使用类似于有问题的用户进行故障排除或确实是非常用户。

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

  3. 你可以有一个管理工具将用户克隆到模拟账户吗?

5

对于我们的Web应用程序,我们使用一个过程,缺少更好的术语被定义为'劫持'用户的帐户。

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

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

+0

我们也使用这种方法,尤其重要,当我们的一些用户没有用户名(他们使用SSO代替)。它只是使用与用户名/密码和SSO登录方法相同的会话系统,但是使用被劫持帐户的配置文件页面中的按钮。我们被迫让我们的一些电话支持人员获得劫持用户帐户的权限,他们发现它非常宝贵。 – eswald 2009-05-15 16:04:13

2

我有4个想法。当我键入他们的3人已经建议(所以我upvoted他们)

变的想法3 - 模拟:

为了用最少的代码改变使这是“尽可能相同的”正常登录,可以通过提供管理员凭证和替代用户名直接在登录时添加模仿功能,例如以管理员身份登录:用户,管理员密码。系统会将其严格视为具有userpassword的用户登录。

想法4:你能访问密码存储吗?如果是这样,请暂时将用户的散列替换为已知密码的散列。 (密码是经常在网上存储在数据库中。SQL查询工具可以做掉期)

+0

我喜欢和#3一起去的地方,Ned对此放大了。 – DOK 2008-11-04 21:42:05

0

我们在网络应用中使用的解决方案是让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