2010-04-18 44 views
3

我们有一个要求,其中管理用户需要以管理员(角色:管理员)管理多个用户(角色:用户)的环境中的特定用户进行代理, 。作为特定用户的代理登录

例如,如果我们在数据库(admin,user1,user2,user3)中有以下用户,我们希望管理员代理为'user2'并在某些情况下使用系统。我们的Web应用程序中的身份验证是基于用户名/密码凭据的,当他没有“user2”的密码时,管理员可以将其代理为“user2”。应用程序如何跟踪此类访问以进行审计,以提及“管理员”代理了“user2”并执行了某些操作。

我正在寻找关于在我们的j2ee(jboss缝)web应用程序中支持这个的建议。

+0

与此类似的东西(https://performancemanager.successfactors.eu/doc/roboHelp/04-About_Your_Worksessions_and_Preferences/ph_set_proxy108.htm)是我正在寻找的 – Sam 2010-04-22 04:23:27

回答

1

您可以创建一个自定义registerAdminAsUser()方法。

@Name("authenticationProxy") 
public class AuthenticationProxy { 

    private @In org.jboss.seam.security.Identity identity; 

    /** 
     * Starting with Seam 2.1+, you should use Credentials instead of Identity 
     * To collect your username and password 
     * 
     * Your JSF Form should looks like 
     * 
     * <h:inputText value="#{credentials.username}"/> 
     * <h:inputSecret value="#{credentials.password}"/> 
     */ 
    private @In org.jboss.seam.security.Credentials credentials; 

    public String registerAdminAsUser2() { 

     identity.getCredentials().setUsername("user2"); 

     /** 
      * Here you should provide any role which should be assigned to User2 
      */ 
     identity.addRole("<A_ROLE>"); 
     identity.addRole("<OTHER_ROLE>"); 
     identity.addRole("<ANOTHER_ROLE>"); 

     /** 
      * Do not call login method because it will call authenticate one 
      * You do not have User2 password 
      */ 
     // identity.login(); 

     return "loggedIn"; 
    } 

    /** 
     * Be aware you may need a unregisterAdminAsUser2 
     */ 

} 

并让您的代理上创建命令

<h:commandButton value="register Admin as User2" value="#{authenticationProxy.registerAdminAsUser2}" rendered="#{credentials.username == 'admin'}"/> 

要使用一些JSF组件,做如下

<h:commandLink rendered="#{s:hasRole('<ANY_ROLE_ASSIGNED_TO_USER2_GOES_HERE>')}"/> 

我希望能对你有用!

+0

谢谢。我们试图模仿用户2在这里登录,是否有可能将user2特定角色添加到这个新身份。如果是这样,我们不需要为'user2'做任何事情的渲染检查。 – Sam 2010-04-26 05:48:36

+0

'proxiedByAdmin'是虚拟密码还是管理员的真实密码? – Sam 2010-04-26 05:50:01

+0

@Samuel是否有可能将user2特定角色添加到此新身份?是的,我会更新答案 – 2010-04-26 11:51:24

2

您可以实施自定义身份验证方法,该方法首先检查user_name/user_pw 如果失败,请检查user_name/admin_pw,以便使用管理员密码将允许以任何用户身份登录。

15.3.2. Writing an authentication method

+0

我没有以明文形式存储admin_pw,它是作为MD5散列存在,所以我将无法进行user_name/admin_pw检查。 – Sam 2010-04-26 06:20:35

+0

然后,在执行查找之前,您仍然可以根据给定密码计算MD5。 – stacker 2010-04-26 09:26:53

0

的方式我去各地做这通常需要保持两个身份,我打电话给他们的逻辑和物理。逻辑标识用于授权检查,物理标识是实际标识(用户坐在键盘后面)。在正常情况下,逻辑标识=物理标识,但为了允许用户(通常是管理员)“充当”另一个用户,可以将逻辑标识更改为目标用户的逻辑标识。通过这种方式,应用程序根据逻辑用户行为,但您始终始终跟踪与物理用户实际坐在计算机后面的人员。 希望有所帮助。

相关问题