J'essaie de comprendre le fonctionnement de la sécurité EJB sur un serveur WebLogic.Configuration de la sécurité EJB sur Weblogic
J'ai un EJB avec la configuration suivante dans ejb-jar.xml
<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>
et weblogic-ejb-jar.xml:
<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>
Je l'interprète comme ceci: Beana fonctionne comme beanA_users. "runas_a" est l'un des beanA_users. Par conséquent, BeanA s'exécute en tant qu'utilisateur runas_a. En outre, tous les utilisateurs qui sont dans le rôle beanA_users sont autorisés à appeler toutes les méthodes BeanA. En d'autres termes, Bean_A s'exécute sous runas_a, et seulement runas_a peut appeler ses méthodes. Est-ce correct?
Cependant, lorsque j'appelle cet EJB d'un autre EJB ayant la configuration ci-dessous, je peux passer à travers. Ne devrait pas Bean A configurer une permission pour le principal assigné au rôle BeanB_users dans le BeanB?
ejb-jar.xml:
<session>
<ejb-name>BeanB</ejb-name>
...
<security-identity>
<run-as>
<role-name>beanB_users</role-name>
</run-as>
</security-identity>
</session>
weblogic-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>
Edit:
Après avoir lu le schéma ejb-jar.xml il ressemble le Bean A dans cet exemple ne définit aucune autorisation dans l'élément <assembly-descriptor>
. Il définit uniquement le rôle de sécurité. Je présume que c'est la raison pour laquelle n'importe quel EJB peut appeler ses méthodes. Mais pourquoi définit-il une attribution de rôle de sécurité dans ce cas? Par exemple, si BeanA avait ce qui suit dans l'élément, dans ce cas, bloquerait-il BeanB puisque la permission n'inclut pas le principal runas_b?
<method-permission>
<role-name>beanA_users</role-name>
<method>
<ejb-name>BeanA</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>
Qu'est-ce qui appelle EJB A? –
Mais si EJB A invoque une méthode d'EJB X, EJB X peut configurer des méthodes d'accès à ses méthodes basées sur le principe "run-as" de l'EJB A. Pour ce faire, il doit définir son propre rôle de sécurité et ajouter le même principal, puis définissez les autorisations pour ce rôle de sécurité dans l'élément method-permission> du fichier ejb-jar.xml. Je me demandais juste pourquoi, quand j'appelle EJB A de EJB B, je peux accéder à ses méthodes. Je suppose que c'est parce qu'aucune autorisation n'est définie dans Bean A même si un rôle de sécurité est. –
EJB A est appelé par EJB B. –