在企业环境中支持新的Web应用程序时,通常需要以特定用户身份登录,以便诊断他们遇到的实际或感知问题.这里有两个相反的问题:
最佳做法是使用散列或加密密码,而不是明文.有时,中间会有第三方SSO(单点登录).无法检索用户的密码.除非用户提供(不鼓励),否则无法以该用户身份登录.
许多Web应用程序都具有个性化和复杂的授权.不同的用户具有不同的角色(管理员,经理,用户),具有不同的权限.有时用户只能看到他们的数据 - 他们的客户或任务.某些用户具有只读访问权限,而其他用户可以进行编辑.因此,每个用户对Web应用程序的看法都是独一无二的.
假设在企业环境中,无法访问用户的桌面或直接连接到他们的计算机.
你是如何处理这种情况的?
编辑:我想重申,在一个大型金融机构或典型的财富500强企业中,全国各地和全世界有数十万名员工,某些IT部门的开发人员不可能直接访问用户的计算机.其中一些是客户使用的面向公众的网络应用程序(如网上银行和股票交易).而且,其中许多都是依赖于Active Directory或SSO的Intranet应用程序,这意味着许多应用程序的用户凭据都是相同的.我非常感谢你们的建议; 有些可能在其他类型的环境中非常有用.
许多这些想法会给用户带来不便,无论是强迫他们更改密码,还是占用桌面进行调试.
Markc的想法是最好的:扩充您的身份验证逻辑,允许超级用户通过提供用户的凭据,但用户的名称加上超级用户凭据,以特定用户身份登录.
我过去就这样做了(伪ish 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
换句话说,如果用户名和密码不进行身份验证,如果密码有冒号,那么实际上它是由冒号连接的管理员用户名和管理员密码,因此如果他们是正确的管理员用户名和密码,请登录为用户名.
这意味着您可以在不知道其秘密的情况下以用户身份登录,并且不会给他们带来任何不便.
对于我们的Web应用程序,我们使用一个过程,缺少更好的术语被定义为"劫持"用户的帐户.
基本上,管理员可以通过简单的按钮点击"劫持"用户的帐户.在代码中,您只需使用唯一标识符(用户ID在较不安全的环境中工作),然后在会话中建立必要的凭据,以便它们可以在该用户的配置文件中工作.对于更安全的环境,您可以为每个用户使用唯一的哈希.
为了确保此劫持方法是安全的,它始终首先验证具有适当权限的经过身份验证的管理员是否正在进行请求.因此,有必要劫持管理员的会话或捕获其身份验证凭据,以便某人可以利用应用程序中的劫持功能.