2010-04-18 5 views
3

관리자 (역할 : 관리자)가 여러 사용자 (역할 : 사용자)를 관리하는 환경에서 관리 사용자가 특정 사용자로 프록시해야하는 요구 사항이 있습니다. .특정 사용자의 프록시로 로그인

예 : 데이터베이스 (admin, user1, user2, user3)에 다음 사용자가있는 경우 특정 시나리오에서 관리자가 'user2'로 프록시하고 시스템을 사용하게 할 수 있습니다. 웹 응용 프로그램의 인증은 사용자 이름/암호 자격 증명을 기반으로하며 'user2'에 대한 암호가없는 경우 관리자가 'user2'로 프록시 할 수있는 메커니즘은 무엇입니까? 응용 프로그램은 'admin2'가 'user2'에 대해 프록시했으며 특정 작업을 수행했다는 것을 언급하기 위해 감사 용도로 이러한 액세스를 추적 할 수 있습니까?

j2ee (jboss seam) 웹 응용 프로그램에서이를 지원하기위한 제안을 찾고 있습니다.

+0

이와 비슷한 내용 (https://performancemanager.successfactors.eu/doc/roboHelp/04-About_Your_Worksessions_and_Preferences/ph_set_proxy108.htm)은 내가 찾고있는 내용입니다. – Sam

답변

1

사용자 정의 registerAdminAsUser() 메소드를 생성 할 수 있습니다. 내가 당신에게 도움이 될 수 있기를 바랍니다

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

을 다음과 같이

@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 
     */ 

} 

그리고 프록시를 사용하려면, 일부 JSF 구성 요소를 사용 할 수있는 명령

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

을 만들!

+0

감사합니다. 우리는 여기서 user2로 로그인하는 것을 모방하려고 노력하고 있습니다. 사용자 2의 특정 역할을이 새로운 ID에 추가 할 수 있습니다. 그렇다면 우리는 'user2'를 위해 무엇인가를하는 렌더링 된 검사가 필요하지 않습니다. – Sam

+0

'proxiedByAdmin'은 관리자의 실제 비밀번호 또는 실제 비밀번호가됩니까? – Sam

+0

@ Samuel이 새로운 신원에 user2 특정 역할을 추가 할 수 있습니까 ??? 예 답변을 업데이트합니다. –

2

먼저 user_name/user_pw 을 확인하는 사용자 정의 인증 방법을 구현할 수 있습니다.이 경우 user_name/admin_pw를 확인하여 admins 비밀번호를 사용하면 모든 사용자로 로그인 할 수 있습니다.

15.3.2. Writing an authentication method

+0

admin_pw를 일반 텍스트로 저장하지 않습니다. MD5 해시로 제공되므로 user_name/admin_pw 확인을 수행 할 수 없습니다. – Sam

+0

그런 다음 조회를 수행하기 전에 주어진 비밀번호에서 MD5를 계산할 수 있습니다. – stacker

0

나는 주변이 일반적으로 유지 포함이 정체성을하고 가야하는 방법은, 나는 그들에게 논리 및 실제를 호출합니다. 논리 ID는 권한 부여 점검에 사용되며 실제 ID는 실제 ID (키보드 뒤에있는 사용자)입니다. 일반적인 시나리오에서는 논리적 인 신원 = 물리적 인 신원이지만 사용자 (일반적으로 관리자)가 다른 사용자의 역할을 할 수있게하려면 논리적 인 신원을 대상 사용자의 신원으로 변경할 수 있습니다. 이렇게하면 응용 프로그램이 논리 사용자에 따라 작동하지만 실제 사용자와 실제로 컴퓨터 뒤에 앉아있는 사람을 항상 추적합니다. 도움이 되길 바랍니다.

관련 문제