Bonjour,

J'essaie de mettre ne place un identification et la gestion des autorisations à l'aide de spring security pour la partie web et JAAS pour les EJB.

Je souhaiterais que spring security utilise JAAS pour faire l'authentification, puis que les EJB soient protégés avec différentes autorisations.

Actuellement, spring security authentifie bien les personnes mais les autorisations ne sont pas propagés à la couche des EJB et seules les méthodes non protégés des EJB sont accessible sinon j'ai cette erreur : javax.ejb.EJBAccessException : Caller unauthorized


Au niveau spring security :
J'ai déclaré un provider JAAS

<code>
<authentication-manager>
<authentication-provider ref="jaasAuthenticationProvider">
<password-encoder hash="md5"/>
</authentication-provider>
</authentication-manager>
<bean id="jaasAuthenticationProvider" class="org.springframework.security.authentication.jaas.JaasAuthenticationProvider">
<property name="loginConfig" value="/WEB-INF/auth.conf"/>
<property name="loginContextName" value="monDomaine"/>
<property name="callbackHandlers">
<list>
<bean class="org.springframework.security.authentication.jaas.JaasNameCallbackHandler"/>
<bean class="org.springframework.security.authentication.jaas.JaasPasswordCallbackHandler"/>
</list>
</property>
<property name="authorityGranters">
<list>
<bean class="security.MyAuthority"/>
</list>
</property>
</bean>

</code>

Le fichier auth.conf :
<code>
monDomaine
{
org.jboss.security.ClientLoginModule required;
};
</code>


Dans le fichier login-config.xml :

<code>
<application-policy name="monDomaine">
<authentication>

<!-- Add this line to your login-config.xml to include the ClientLoginModule propogation -->
<login-module code="org.jboss.security.ClientLoginModule"
flag="required"></login-module-->

<login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule"
flag = "required">
<module-option name = "unauthenticatedIdentity">visitor</module-option>
<module-option name = "dsJndiName">java:/gestionboursiereDS</module-option>
<module-option name = "principalsQuery">SELECT password FROM users WHERE username = ?</module-option>
<module-option name = "rolesQuery">SELECT Role, RoleGroup FROM users WHERE username = ?</module-option>
<module-option name = "debug">true</module-option>
<module-option name = "hashAlgorithm">MD5</module-option>
<module-option name = "hashEncoding">HEX</module-option>
</login-module>


</code>

Dans le fichier jboss-web.xml :
<code>
<security-domain>java:/jaas/monDomaine</security-domain>
</code>


Au niveau des EJB utilisation des tags :
@SecurityDomain("monDomaine")
et @RolesAllowed("ADMINISTRATOR_ROLE")


Au niveau des EJB, je suis reconnu comme "visitor" ce qui correspond à l'option "unauthenticatedIdentity" que j'ai déclaré.

Avez-vous des idées ? Qu'est ce je ne fait pas bien ou pas ?
Merci,