2017-09-24 12 views
0

EJB 보안이 WebLogic 서버에서 작동하는 방식을 이해하려고합니다. 나는 이런 식으로 해석Weblogic에서 EJB 보안 구성

<security-role-assignment> 
    <role-name>beanA_users</role-name> 
    <principal-name>runas_a</principal-name> 
</security-role-assignment> 
<run-as-role-assignment> 
    <role-name>beanA_users</role-name> 
    <run-as-principal-name>runas_a</run-as-principal-name> 
</run-as-role-assignment> 

:

나는

<session> 
    <ejb-name>BeanA</ejb-name> 
     .... 
     <security-identity>    
      <run-as> 
       <role-name>beanA_users</role-name> 
      </run-as> 
     </security-identity> 
</session> 

     <assembly-descriptor> 
      <security-role> 
       <role-name>beanA_users</role-name> 
      </security-role>  
      <container-transaction>  
       <method> 
        <ejb-name>BeanA</ejb-name> 
       <method-name>*</method-name> 
       </method> 
      </container-transaction> 
     </assembly-descriptor> 

와 웹 로직에서 EJB-jar.xml의에서

의 ejb-jar.xml 파일의 구성을 다음과 EJB를 BeanA는 다음과 같이 실행 beanA_users. "runas_a"는 beanA_users 중 하나입니다. 따라서 BeanA는 runas_a 사용자로 실행됩니다. 또한 beanA_users 역할에있는 모든 사용자는 모든 BeanA 메소드를 호출 할 수 있습니다. 즉, Bean_A는 runas_a로 실행 중이며 runas_a 만 메소드를 호출 할 수 있습니다. 이 올바른지?

그러나 아래 구성을 가진 다른 EJB에서이 EJB를 호출 할 때 통과 할 수 있습니다. Bean은 BeanB의 BeanB_users 역할에 할당 된 주체에 대한 사용 권한을 구성해야합니까?

의 ejb-jar.xml의 :

<session>  
    <ejb-name>BeanB</ejb-name> 
      ... 
     <security-identity>    
      <run-as> 
       <role-name>beanB_users</role-name> 
      </run-as> 
     </security-identity> 
</session> 

웹 로직에서 EJB-jar.xml의 :

<run-as-role-assignment> 
    <role-name>beanB_users</role-name> 
    <run-as-principal-name>runas_b</run-as-principal-name> 
</run-as-role-assignment> 

편집 :

이처럼 보이는 EJB-jar.xml의 스키마를 읽은 후 이 예에서 Bean A는 <assembly-descriptor> 요소에서 사용 권한을 정의하지 않습니다. 보안 역할 만 정의합니다. 나는 이것이 모든 EJB가 그 메소드를 호출 할 수있는 이유라고 생각한다. 그러나이 경우 보안 역할 할당을 정의하는 이유는 무엇입니까? 예를 들어, BeanA가 엘리먼트 내에 다음과 같은 것을 가지고 있다면, 그 경우 runas_b principal을 포함하지 않은 BeanB가 통과하지 못하게 할 것인가?

<method-permission> 
    <role-name>beanA_users</role-name> 
     <method> 
      <ejb-name>BeanA</ejb-n‌​ame> 
       <method-name>*</method-name> 
     </method‌​> 
</method-permission‌​> 

답변

0

여기에 막대기의 끝이 잘못되었습니다.

당신은 추가 할 때 :

<security-identity>    
     <run-as> 
      <role-name>beanA_users</role-name> 
     </run-as> 
    </security-identity> 

빈 정의에,이 오히려 사용자가 선동 것보다, 자신을 선동하는 콩에있는 모든 호출에 적용되어야 할 어떤 역할 웹 로직을 알려줍니다.

즉,이 보안 ID는 EJB 타이머 메소드 및 MDB의 onMessage 메소드에 적용됩니다 (그리고 정확하게 기억한다면 일부 하우스 키핑 조작). <run-as-role-assignment>...</run-as-role-assignment> 요소

웹 로직 확장은 이러한 방법에 정의 된 주요 그래서 이러한 메소드 호출 한 동안 anonymous 이외의 그 javax.ejb.EJBContext.getCallerPrincipal() 반환 뭔가를 호출하여 추가합니다.

기타 모든 경우에이 보안 정보는 일반적으로 웹 응용 프로그램의 로그인 한 사용자의 ID에서 전파됩니다.

일반적으로 사용자는 응용 프로그램 서버에서 제공하는 보안 도메인에 연결된 서블릿 기반 웹 응용 프로그램을 통해 인증됩니다. 그런 다음 서블릿 컨테이너는 들어오는 HTTP 요청을 사용자 보안 주체와 연결합니다. 역할 기반 액세스를 수행하려면 먼저 사용자 핵심 사용자를 하나 이상의 "역할"과 연결해야합니다 (이는 공급 업체에 따라 다르지만 종종 JAAS와 연결됨).사용자에게 역할이없는 경우 컨테이너는 배포 설명자 또는 연관된 @javax.annotation.security.RolesAllowed 주석의 보안 역할 선언으로 보호 된 서블릿 또는 다운 스트림 EJB를 호출하려는 모든 시도를 거부합니다. 서블릿 컨테이너에 의해 설정된 보안 컨텍스트는 보안 역할에 의해 성공적으로 반환되거나 차단 될 때까지 후속 EJB 호출 체인을 통해 전파됩니다.

자세한 내용은 Servlet 사양 및 EJB 사양의 "보안"장을 참조하십시오.

+0

EJB A를 호출하는 것은 무엇입니까? –

+0

그러나 EJB A가 EJB X의 메소드를 호출하면 EJB X는 EJB A의 "run-as"주체를 기반으로 메소드에 대한 메소드 액세스 권한을 설정할 수 있습니다.이를 수행하려면 자체 보안 역할을 정의하고 추가해야합니다 동일한 principal을 ejb-jar.xml의 요소에서 해당 보안 역할에 대한 사용 권한을 정의하십시오. 나는 EJB B에서 EJB A를 호출 할 때 그 메소드에 액세스 할 수 있는지 궁금했다. 내 생각 엔 보안 역할이 있더라도 Bean A에 사용 권한이 정의되어 있지 않기 때문입니다. –

+0

EJB A는 EJB B에 의해 호출됩니다. –