2015-01-06 6 views
0

특정 역할을 가진 사용자가 자신의 ID를 기반으로 EJB 메서드를 호출 할 수있는 시나리오가 있습니다. EJB 빈에서 사용자에 대한 특정 역할을 가진 @RolesAllowed 주석이 있습니다. 역할 기반 검사의 경우 메소드 호출은 잘 작동하지만 사용자가 그림을 호출 할 때 다른 사용자의 ID를 전달하는 bean 메소드를 호출하면 메소드가 여전히 호출됩니다. RBAC를 사용하여이 시나리오를 피하는 방법 또는 다른 방법으로이 작업을 수행해야합니까?RBAC를 기반으로 다른 사용자의 리소스에 대한 한 사용자의 액세스 제어

답변

0

응용 프로그램 논리 (인증 논리)가 다른 사용자 ID를 사용하는 메소드 호출을 금지해야합니다. 어떤면에서는, 그렇게하면 다른 사람의 신분을 속이고 있습니다.

어노테이션은 사용자가 수동으로 전달한 값이 아니라 프레임 워크에서 검색 한 사용자 ID를 기반으로 검색되는 역할을 사용해야합니다. 서블릿 세계에서 예제를 얻으려면 HttpServletRequest 객체의 getUserPrincipal() 메서드를 사용합니다.

여기 서블릿에 대한 Java EE 6 자습서의 단락을 인용하고 있습니다. 동일한 원칙을 ejbs로 추정 할 수 있습니다.

일반적으로 보안 관리는 웹 구성 요소에 투명하게 컨테이너에서 시행해야합니다. 이 절에서 설명하는 보안 API는 웹 구성 요소 메소드가 보안 컨텍스트 정보에 액세스해야하는 덜 빈번한 상황에서만 사용해야합니다.

  • 대해 getRemoteUser, 클라이언트가 인증되는 사용자 이름을 결정

    • 서블릿 3.0 구성 요소의 발신자에 대한 보안 정보에 액세스 할 수 있도록 다음과 같은 방법을 지정합니다. getRemoteUser 메소드는 요청과 함 2 컨테이너와 연관된 원격 사용자 (호출자)의 이름을 리턴합니다. 인증 된 사용자가없는 경우이 메소드는 null을 리턴합니다.
    • isUserInRole - 원격 사용자가 특정 보안 역할에 있는지 결정합니다. 인증 된 사용자가없는 경우이 메소드는 false를 반환합니다. 이 메서드는 String 사용자 role-name 매개 변수를 필요로합니다.

    security-role-ref 요소는 메소드에 전달할 역할 이름이 들어있는 역할 이름 하위 요소가있는 배포 설명자로 선언되어야합니다. 보안 역할 참조 사용은 역할 참조 선언 및 연결에서 설명합니다.

    • getUserPrincipal - 현재 사용자의 핵심 이름을 확인하고 java.security.Principal 객체를 반환합니다. 인증 된 사용자가없는 경우이 메소드는 null을 리턴합니다. getUserPrincipal에 의해 리턴 된 Principal의 getName 메소드를 호출하면 (자), 리모트 유저의 이름이 돌려 주어집니다.

    애플리케이션은 이러한 API를 사용하여 얻은 정보를 기반으로 비즈니스 로직을 결정할 수 있습니다.

  • 출처 : Using Programmatic Security with Web Applications

    관련 문제