2010-04-18 50 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

的方式我去各地做這通常需要保持兩個身份,我打電話給他們的邏輯和物理。邏輯標識用於授權檢查,物理標識是實際標識(用戶坐在鍵盤後面)。在正常情況下,邏輯標識=物理標識,但爲了允許用戶(通常是管理員)「充當」另一個用戶,可以將邏輯標識更改爲目標用戶的邏輯標識。通過這種方式,應用程序根據邏輯用戶行爲,但您始終始終跟蹤與物理用戶實際坐在計算機後面的人員。 希望有所幫助。